std::isalpha는 Boost::locale과 함께 사용할 때 bad_cast를 발생시킵니다.
-
12-12-2019 - |
문제
Debian 7 GNU/Linux(GCC 버전은 4.6.3-1)에서 Boost::locale(1.49)을 사용하는 데 몇 가지 문제가 있습니다.코드는 cp1251에 저장됩니다."isalpha"(또는 "boost::algorithm::is_alpha")와 같은 함수를 사용하면 예외(bad_cast)가 발생합니다.이 수표에는 적절한 패싯이 없는 것 같습니다.코드는 다음과 같습니다.
#include <iostream>
#include <boost/locale.hpp>
int main ()
{
boost::locale::generator gen;
std::locale loc(gen.generate("ru_RU.cp1251"));
unsigned char debug501 = 'Б';
bool debug500 = std::isalpha(debug501, loc);
std::cout<< debug500;
return 0;
}
Visual Studio 2008이 설치된 Windows 7에서는 예외 없이 실행됩니다.그러나 여전히 한 가지 문제가 있습니다.이 경우 "debug500"은 false로 설정됩니다.다음과 같이 로캘이 생성된 경우에만 제대로 작동합니다. std::locale loc(".1251")
.그러나 부스트에 의해 로케일이 생성되면 동일한 문제가 나타납니다. std::locale loc(boost::locale::generator().generate("ru_RU.cp1251"));
.누군가 코드의 문제점 및/또는 cp1251 로케일과 함께 부스트 및 표준을 사용하여 유사한 검사(isalpha)를 수행할 수 있는 방법을 설명할 수 있다면 감사하겠습니다.
해결책
바꾸다:
unsigned char debug501 = 'Б';
와 함께:
char debug501 = 'Б';
제휴하지 않습니다 StackOverflow