C++0x kontra unicode

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
hfjh
Piegowaty Guziec
Piegowaty Guziec
Posty: 1
Rejestracja: 02 maja 2011, 14:04
Wersja Ubuntu: 10.10
Środowisko graficzne: GNOME
Architektura: x86

C++0x kontra unicode

Post 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.
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 27 gości