我正在使用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()
答案 0 :(得分: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;
它将按预期工作。