Strona 1 z 1

C++0x kontra unicode

: 02 maja 2011, 14:31
autor: hfjh
Witam,
w nowym projekciku który właśnie zaczynam postanowiłem wykorzystać parę featursów z C++0x - m. in. obsługę Unicode. W tym celu napisałem sobie klasę dziedziczącą po std::basic_string, używającą UTF-16, z dodanymi metodami do konwersji na UTF-8 i UTF-32. I właśnie z tą konwersją mam problem:

Kod: Zaznacz cały

U8String UString::to_utf8() const
{
	typedef std::codecvt<char16_t, char, std::mbstate_t> Cvt;
	const Cvt& cvt=std::use_facet<Cvt>(std::locale());


	char* res=new char[this->size()*2+1];
	const char16_t* lastConvChar;
	char* lastChar;
	std::mbstate_t state;


	cvt.out(state, this->c_str(), (const char16_t*)(this->c_str()+this->size()*sizeof(char16_t)), lastConvChar,
			&res[0], &res[this->size()*2], lastChar);


	return U8String(res, (size_t)(lastChar-res));
}
Funkcja std::use_facet<Cvt>(std::locale()); rzuca wyjątkiem std::bad_cast, co według dokumentacji oznacza że odpowiednia instancja kalsy nie została przez tą funkcję znaleziona. Nie wiem jak ten problem rozwiązać (może coś z konstruktorem std::locale?), tak więc byłbym bardzo wdzięczny za jakiekolwiek wskazówki.

Piszę pod g++ 4.5.