Le modèle codecvt
ne prend-il pas en paramètre le type d'état? Pouvez-vous simplement utiliser un type de pointeur à la place? Je ne me souviens pas si les différentes classes qui utilisent un codecvt
imposent des exigences sur le type d'état. En supposant que vous ne pouvez pas simplement changer le type d'état ... sur MSVC 2008, mbstate_t
est typedef
d int
. La norme exige seulement que int
soit plus grand que 16 bits et pas plus long qu'un long, donc ce n'est pas sûr de 64 bits. Je suppose que vous auriez besoin de stocker un index ou une clé dans une structure de données au lieu d'un pointeur.
update:
Les compilations suivantes sous VS2008, au moins:
std::wstring const in = L"input";
size_t const buf_size = 256;
char* buf = new char[buf_size];
wchar_t const* char_next;
char * byte_next;
void* state = NULL;
typedef std::codecvt<wchar_t, char, void*> codecvt_t;
codecvt_t::result res =
std::use_facet<codecvt_t>(std::locale()).out(
state, in.c_str(), in.c_str() + in.length(),
char_next, &buf[0], &buf[buf_size], byte_next);
The Standard C++ est remarquablement réticents en ce qui concerne mbstate_t. Le type est en fait défini par la norme C. J'ai ré-étiqueté votre question en conséquence. –