指针可以存储在std :: mbstate_t类型中吗?

时间:2009-08-23 18:04:19

标签: c++

我正在编写一个使用iconv的std :: codecvt facet的实现。 This实现在std :: mbstate_t state参数中存储指向堆分配数据的指针。

一切正常,但此代码是64位兼容吗? 是否存在指针大小超过std :: mbstate_t?

大小的平台

1 个答案:

答案 0 :(得分:1)

codecvt模板不是将状态类型作为参数吗?你可以在那里使用指针类型吗?我不记得使用codecvt的各种类是否对状态类型提出了要求。

假设您不能仅在MSVC 2008上更改状态类型... mbstate_t typedefint。该标准仅要求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);