Boost只序列化std :: wstring的第一个字符

我正在使用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()
    
已邀请:
您正在尝试使用窄字符存档序列化宽字符串。这会导致包含宽字符串的字节序列被解释为一系列窄字符。如果考虑到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;
它将按预期工作。     

要回复问题请先登录注册