6

大文字と小文字の区別を無視して文字列を比較するために boost::locale を使用する方法を理解しようとしています。Boostのドキュメントからコードを直接試しました:

http://www.boost.org/doc/libs/1_51_0/libs/locale/doc/html/collat​​ion.html

boost::locale::generator gen;
std::locale vLocale = gen("");


std::wstring a=L"Façade", b=L"facade";

// Following will throw bad_cast
bool eq = std::use_facet<boost::locale::collator<wchar_t>>(vLocale).compare(
    boost::locale::collator_base::secondary,
    a,
    b
) == 0;

if(eq) std::cout << "OK" << std::endl;

このコードは、実行時に std::bad_cast 例外をスローします。boost::locale::generator のコンストラクターで多くのパラメーターを試しました。私が遭遇した問題について知っている人はいますか?

g++4.6 および Boost 1.51.0 で C++11 を使用しています

4

1 に答える 1

5

間違ったロケール オブジェクトを使用しているようです。まず、グローバル ロケールを使用し、次に (使用する場合std::cout) ストリームにロケールを吹き込む必要があります。このようなもの:

boost::locale::generator gen;
std::locale loc = gen("");
std::locale::global(loc);

ただし、あなたの例では、を使用していない場合はstd::cout、グローバル ロケールを設定するだけで、必要なファセットを準備できます。

于 2012-10-29T22:17:59.970 に答える