gpt4 book ai didi

c++ - 在 C++ 中寻找 MemoryStream

转载 作者:太空狗 更新时间:2023-10-29 20:07:24 25 4
gpt4 key购买 nike

在奇妙的 C# 世界中,我可以创建内存流而不指定其大小,写入其中,然后只获取底层缓冲区。

我如何在 C++ 中做同样的事情?基本上我需要做的:

memory_stream  ms(GROW_AS_MUCH_AS_YOU_LIKE);

ms << someLargeObjects << someSmallObjects << someObjectsWhosSizeIDontKnow;

unsigned char* buffer = ms.GetBuffer();
int bufferSize = ms.GetBufferSize();

rawNetworkSocket.Send(buffer, bufferSize);

顺便说一下,虽然我对它不是很熟悉,但我的项目得到了 boost 。

谢谢。

最佳答案

#include <sstream>

std::ostringstream buffer; // no growth specification necessary
buffer << "a char buffer" << customObject << someOtherObject;

std::string contents = buffer.str();
size_t bufferSize = contents.size();

rawNetworkSocket.Send(contents); // you can take the size in Send

使用这种方法,您必须在收到结果的地方解析结果(因为上面的代码只是将您的数据转换为非结构化字符串。

另一个问题是,由于 C++ 不支持反射,您必须为对象定义运算符 <<。这是 Custom 类的代码:

template<typename C, typename T>
std::basic_ostream<C,T>& operator << (
std::basic_ostream<C,T>& out, const Custom& object)
{
out << object.member1 << "," << object.member2 /* ... */ << object.memberN;
return out;
}

如果你想要结构化序列化,看看boost::serialization .

关于c++ - 在 C++ 中寻找 MemoryStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3091152/

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