我正在编写一个使用iconv的std :: codecvt facet的实现。 This实现在std :: mbstate_t state参数中存储指向堆分配数据的指针。
一切正常,但此代码是64位兼容吗? 是否存在指针大小超过std :: mbstate_t?
大小的平台答案 0 :(得分:1)
codecvt
模板不是将状态类型作为参数吗?你可以在那里使用指针类型吗?我不记得使用codecvt
的各种类是否对状态类型提出了要求。
假设您不能仅在MSVC 2008上更改状态类型... mbstate_t
typedef
为int
。该标准仅要求int
大于16位且不大于长,因此它不是64位安全的。我想你需要将索引或键存储到某些数据结构而不是指针。
更新
以下在VS2008下编译,至少:
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);