C++ 存储大量不同类型数据的最佳方法?

C++ 存储大量不同类型数据的最佳方法?,c++,types,stl,C++,Types,Stl,我想存储一个缓冲区数据。我必须以字节、单词和DWORD的形式将数据附加到数据中。实现数据的最佳方法是什么?STL中是否有用于此的内容?从您刚才所说的内容来看,似乎您希望在STL容器中有不同的类型。有两种方法可以做到这一点: 拥有对象的层次结构并存储指向它们的引用/指针(即std::vector 使用(即std::vector) 如果您需要与一些遗留代码 C 代码进行连接,或者通过网络发送原始数据,这可能不是最好的解决方案。 < P>如果要创建一个完全非结构化数据的连续缓冲区,请考虑使用 STD:

我想存储一个缓冲区
数据
。我必须以字节、单词和DWORD的形式将数据附加到
数据中。实现数据的最佳方法是什么?STL中是否有用于此的内容?

从您刚才所说的内容来看,似乎您希望在STL容器中有不同的类型。有两种方法可以做到这一点:

  • 拥有对象的层次结构并存储指向它们的引用/指针(即
    std::vector
  • 使用(即
    std::vector

  • 如果您需要与一些遗留代码<代码> C <代码>代码进行连接,或者通过网络发送原始数据,这可能不是最好的解决方案。

    < P>如果要创建一个完全非结构化数据的连续缓冲区,请考虑使用<代码> STD::向量< /代码>:

    //将项添加到缓冲区的末尾,忽略endian问题
    样板
    addToVector(标准::vector&v,T)
    {
    v、 插入(v.end(),重新解释转换(&t),重新解释转换(&t+1));
    }
    //在缓冲区的末尾添加一个项目,并保持一致的结尾
    样板
    addToVectorEndian(标准::vector&v,T)
    {
    对于(int i=0;i>=8;//或者更好:字符位
    }
    }
    
    您存储的数据必须具有某种结构。您能给出一些数据示例吗?在缓冲区包含数据后,您还需要对其执行哪些其他操作?您需要记住内容的类型还是仅仅是一大块原始字节?您定义“最佳”的标准是什么?您喜欢存储所使用的大小、代码的复杂度或速度吗?根据您对该问题的回答,解决方案可能会有所不同。您可以尝试std::tuple,但有一些注意事项:
    // 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
      }
    }