2012-10-29 10 views
5

Próbuję zrozumieć, jak użyć parametru boost :: locale, aby porównać ciągi ignorujące przypadek i warianty. I bezpośrednio spróbował kod z dokumentacji Boost:Dlaczego std :: bad_cast jest generowany przez boost :: locale?

http://www.boost.org/doc/libs/1_51_0/libs/locale/doc/html/collation.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; 

Ten kod rzuci wyjątek std :: bad_cast gdy uruchomiony. Próbowałem wielu parametrów w konstruktorze boost :: locale :: generator. Czy ktoś wie o napotkanym problemie?

Używam C++ 11 zg ++ 4.6 i zwiększyć 1.51.0

+0

Tak jak podpowiedź, 'bad_cast' _exception_ sygnalizuje, że podane' locale' nie ma żądanego 'aspektu'. –

Odpowiedz

4

Wydaje używasz nieprawidłowej locale object.You powinny w pierwszym użyciem globalnej lokalizacji, a następnie (jeśli chcesz używać cout) przesyłaj locale do strumienia. Somethig tak:

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

Ale w swoim przykładzie, jeśli nie używasz cout wystarczy ustawić globalne ustawienia regionalne w celu masz wymagane aspekty wykorzystania.

+1

Nie ma potrzeby, aby 'std :: use_facet (l)' miał ustawiony określony globalny 'std :: locale', który ma być ustawiony! Wydaje się raczej, że obiekt lokalny nie zawiera wymaganego aspektu. –

+0

Ues wygląda na to, że moje ustawienia regionalne nie mają mojego aspektu kolatora. Ale stworzyłem go z generatorem i spodziewałem się, że będzie zawierał jeden ... :( –

+0

Segmentacja tekstu wymaga również ICU, upewnij się, że kompilujesz doładowanie przy pomocy ICU, można to łatwo zrobić poprzez homebrew w ten sposób: 'brew install boost - -with-icu4c --cxx11', a następnie kompilowanie za pomocą '-I/usr/local/include' i łączenie z' -L/usr/local/lib -lboost_locale-mt' – bithavoc

Powiązane problemy