2009-08-23 90 views
0

我在寫一個使用iconv的std :: codecvt構面的實現。 This實現在std :: mbstate_t狀態參數中存儲一個指向堆分配數據的指針。指針是否可以存儲在std :: mbstate_t類型中?

一切工作正常,但這是64位兼容的代碼? 是否有指針大小超過std :: mbstate_t大小的平臺?

+0

C++標準是非常沉默,當涉及到的mbstate_t。該類型實際上由C標準定義。我已經相應地重新標記了你的問題。 – 2009-08-23 19:14:24

回答

1

模板codecvt是否將狀態類型作爲參數?你可以直接使用指針類型嗎?我不記得使用codecvt的各個類是否在狀態類型上放置了要求。

假設您不能只更改MSVC 2008上的狀態類型...... mbstate_ttypedef d作爲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); 
+0

狀態類型與std :: mbstate_t不同的Codecvt在標準流緩衝實現方面基本上沒有用處。使用另一種狀態類型將迫使你重新實現streambuf祖先。 – Basilevs 2009-08-24 02:34:18

相關問題