gpt4 book ai didi

c++ - 我可以重载 CArchive << 运算符以使用 std::string 吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:41:52 24 4
gpt4 key购买 nike

我在我的 MFC 应用程序中使用 std::string,我想将它存储在文档的 Serialize() 函数中。我不想将它们存储为 CString,因为它在那里写了自己的东西,我的目标是创建一个我知道其格式并且可以被其他应用程序读取而无需 CString 的文件。所以我想将我的 std::strings 存储为 4 字节 (int) 字符串长度,后跟包含该字符串的该大小的缓冲区。

void CMyDoc::Serialize(CArchive& ar)
{
std::string theString;

if (ar.IsStoring())
{
// TODO: add storing code here
int size = theString.size();
ar << size;
ar.Write( theString.c_str(), size );

}
else
{
// TODO: add loading code here
int size = 0;
ar >> size;
char * bfr = new char[ size ];
ar.Read( bfr, size);
theString = bfr;
delete [] bfr;
}
}

上面的代码不是很好,我必须分配一个临时 bfr 来读取字符串。首先,我可以在没有临时缓冲区的情况下直接将字符串读入 std::string 吗?其次,我能否为 std::string/CArchive 重载 << 缓冲区,以便我可以简单地使用 ar << theString?总的来说,有没有更好的方法来使用 CArchive 对象读/写 std::string?

最佳答案

您可以从您的 STL 字符串构建一个就地 CString 并将其序列化。像这样的东西:

CString c_string(my_stl_string.c_str();
ar << c_string;

你可以把它放在全局运算符重载中,这样你就可以了

ar << my_c_string;

来自任何地方,例如:

CArchive& operator<<(CArchive rhs, string lhs) {
CString c_string(lhs.c_str());
rhs << c_string;
}

关于c++ - 我可以重载 CArchive << 运算符以使用 std::string 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7446484/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com