Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Boost:包含指针的类实例的序列化_C++_Serialization_Boost - Fatal编程技术网

C++ Boost:包含指针的类实例的序列化

C++ Boost:包含指针的类实例的序列化,c++,serialization,boost,C++,Serialization,Boost,如果我使用Boost库序列化类容器的实例: class Container { public: Block** blocks; int blocksNumber; } class Block { public: int blockType; unsigned char* data; } 然后填充所有必要的数据以获得完整的容器: Container container = new Container(); container.blocks

如果我使用Boost库序列化类容器的实例:

class Container
{
   public:
      Block** blocks;
      int blocksNumber;
}

class Block
{
   public:
     int blockType;
     unsigned char* data;
}
然后填充所有必要的数据以获得完整的容器:

Container container = new Container();
container.blocksNumber=5;
Block** blocks = (Block**)malloc(sizeof(Block*)*container.blocksNumber);
blocks[0] = (Block*)malloc(sizeof(Block));
//..... Filling all the necessary data... and constructing the container

所以我的问题是:实例容器的序列化格式是否包含所有分配的数据?换句话说,如果我反序列化容器的序列化格式,我是否能够读取数据的内容?多谢各位

我不会浪费任何时间思考你为什么把不安全的C大炮带到这里来。您正在期待使用BooSooSurvivices,一个现代的通用C++库。 下面是它的外观:

struct Block {
    int blockType;
    std::vector<uint8_t> data;
};

struct Container {
    std::vector<std::vector<Block>> block_lists;
};
请参阅完整的工作示例:

输出

22序列化::归档文件11 0 0 0 0 2 0 0 0 3 0 0 0 1 4 0 17 19 20 2 4 0 33 34 36 3 4 0 49 50 51 52 3 0 4 0 0 6 6 6 6 68 5 4 0 81 82 84 6 0 97 98 100


你试过了吗?什么?-你在C++中使用MALLC和双指针吗?谢谢你。我和你有同样的问题,但是Boost序列化不支持双指针,那太可怕了…
#include <boost/serialization/vector.hpp>

class Block
{
   public:
     int blockType;
     std::vector<uint8_t> data;

   private:
       friend class boost::serialization::access;
       template <typename Ar> void serialize(Ar& ar, unsigned) {
               ar & blockType;
               ar & data;
           }
};

class Container
{
   public:
       std::vector<std::vector<Block>> block_lists;

   private:
       friend class boost::serialization::access;
       template <typename Ar> void serialize(Ar& ar, unsigned) {
               ar & block_lists;
           }
};

#include <boost/archive/text_oarchive.hpp>

int main()
{
    Container const letshavesome = {
        { // block_lists
            {
                Block { 1, { 0x11, 0x12, 0x13, 0x14 } },
                Block { 2, { 0x21, 0x22, 0x23, 0x24 } },
                Block { 3, { 0x31, 0x32, 0x33, 0x34 } },
            },
            {
                Block { 4, { 0x41, 0x42, 0x43, 0x44 } },
                Block { 5, { 0x51, 0x52, 0x53, 0x54 } },
                Block { 6, { 0x61, 0x62, 0x63, 0x64 } },
            },
        }
    };

    boost::archive::text_oarchive oa(std::cout);
    oa << letshavesome;
}