我想存储一个缓冲区data
。我将不得不以BYTE,WORD和DWORD的形式将数据附加到data
。实施data
的最佳方式是什么? STL中有什么东西吗?
答案 0 :(得分:0)
从你说过的小事,听起来你想在STL容器中有不同的类型。有两种方法可以做到这一点:
std::vector< boost::shared_ptr<MyBaseObject> >
std::vector< boost::variant<BYTE, WORD, DWORD> >
)但是,如果您需要与某些旧版C
代码接口,或通过网络发送原始数据,这可能不是最佳解决方案。
答案 1 :(得分:0)
如果要创建完全非结构化数据的连续缓冲区,请考虑使用std::vector<char>
:
// Add an item to the end of the buffer, ignoring endian issues
template<class T>
addToVector(std::vector<char>& v, T t)
{
v.insert(v.end(), reinterpret_cast<char*>(&t), reinterpret_cast<char*>(&t+1));
}
// Add an item to end of the buffer, with consistent endianness
template<class T>
addToVectorEndian(std::vector<char>&v, T t)
{
for(int i = 0; i < sizeof(T); ++i) {
v.push_back(t);
t >>= 8; // Or, better: CHAR_BIT
}
}