4

我正在使用 boost 与文本存档序列化 std::wstring 变量。如果我切换到 std::string 它工作得很好,但是当我使用 wstring 时,我只得到一个字符序列化。为什么?

std::wstring text;

template<class Archive> void serialize(Archive &ar, const unsigned int version)
{
    ar & text;
}

...

std::ostringstream stream;

boost::archive::text_oarchive archive(stream);

archive << params;

...

stream.str()
4

1 回答 1

10

您正在尝试使用窄字符存档序列化宽字符串。这会导致包含宽字符串的字节序列被解释为窄字符序列。如果您考虑到 ASCII 字符仅占用相应宽字符编码的一个字节,而将宽字符集的所有其他字节设置为零,那么很明显,窄字符存档在看到第一个字符后停止(因为它达到了 ASCII 字符代码后面的零字节)。

如果您将代码更改为:

std::wstring text;

template<class Archive> 
void serialize(Archive &ar, const unsigned int version)
{ 
    ar & text; 
}

std::wstringstream stream;
boost::archive::text_woarchive archive(stream);
archive << params;

它将按预期工作。

于 2011-04-09T22:08:07.770 回答