C++ 为什么boost::locale会抛出std::bad_cast?
我试图理解如何使用boost::locale来比较忽略大小写和变量的字符串。我直接尝试了Boost文档中的一段代码:C++ 为什么boost::locale会抛出std::bad_cast?,c++,exception,boost,locale,C++,Exception,Boost,Locale,我试图理解如何使用boost::locale来比较忽略大小写和变量的字符串。我直接尝试了Boost文档中的一段代码: boost::locale::generator; std::locale vLocale=gen(“”); std::wstring a=L“立面”,b=L“立面”; //下面将抛出坏的\u类型 bool eq=std::使用切面(vLocale)。比较( boost::locale::collator_base::secondary, A. B ) == 0; 如果(eq)
boost::locale::generator;
std::locale vLocale=gen(“”);
std::wstring a=L“立面”,b=L“立面”;
//下面将抛出坏的\u类型
bool eq=std::使用切面(vLocale)。比较(
boost::locale::collator_base::secondary,
A.
B
) == 0;
如果(eq)std::cout似乎您使用了不正确的区域设置对象。首先,您应该使用全局语言环境,然后(如果您想使用std::cout
)将语言环境嵌入到流中。大概是这样的:
boost::locale::generator gen;
std::locale loc = gen("");
std::locale::global(loc);
但是,在您的示例中,如果您没有使用std::cout
,只需设置全局区域设置,就可以准备好所需的方面。作为一个提示,bad\u cast
异常表示给定的locale
没有请求的facet
。不需要std::use\u facet(l)
设置特定的全局std::locale
!似乎locale对象不包含所需的方面。似乎我的locale没有collator方面。但我用生成器创建了它,我希望它包含一个(另外,文本分割需要ICU,请确保您使用ICU支持编译boost,这可以通过如下自制软件轻松完成:brew安装boost--with-icu4c--cxx11
,然后使用-I/usr/local/include
编译,并链接到-L/usr/local/lib-lboost\u locale-mt
boost::locale::generator gen;
std::locale loc = gen("");
std::locale::global(loc);