存储大量不同类型数据的最佳方式?

时间:2011-09-25 17:02:39

标签: c++ types stl

我想存储一个缓冲区data。我将不得不以BYTE,WORD和DWORD的形式将数据附加到data。实施data的最佳方式是什么? STL中有什么东西吗?

2 个答案:

答案 0 :(得分:0)

从你说过的小事,听起来你想在STL容器中有不同的类型。有两种方法可以做到这一点:

  1. 拥有对象层次结构并存储对它们的引用/指针(即std::vector< boost::shared_ptr<MyBaseObject> >
  2. 使用boost::variant(即std::vector< boost::variant<BYTE, WORD, DWORD> >
  3. 但是,如果您需要与某些旧版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
  }
}