我是序列化的新手,我无法使用Cereal library序列化std::vector
个对象。这是一个说明问题的示例:
class MyClass
{
int x, y, z;
class MyOtherClass
{
string name, description;
public:
template<class Archive>
void serialize(Archive & archive)
{
archive(name, description);
}
};
vector<MyOtherClass> Victor;
vector<int> ints;
public:
template<class Archive>
void serialize(Archive & archive)
{
archive(x, y, z, ints); // error C2338: cereal could not find any output serialization functions for the provided type and archive combination.
}
};
尝试序列化ints
对象或Victor
对象会导致error C2338: cereal could not find any output serialization functions for the provided type and archive combination.
以下是我在main
函数中使用的代码:
MyClass MyObject;
ofstream datafile(path, ios::binary);
{ cereal::BinaryOutputArchive oarchive(datafile); oarchive(MyObject); }
我做错了什么?
答案 0 :(得分:0)
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
using namespace std;
#include <cereal/archives/json.hpp>
#include <cereal/types/vector.hpp>
// See details in http://uscilab.github.io/cereal/stl_support.html
class MyClass {
int x, y, z;
class MyOtherClass {
string name, description;
public:
template <class Archive>
void serialize( Archive &archive )
{
archive( CEREAL_NVP( name ), CEREAL_NVP( description ) );
}
};
vector<MyOtherClass> Vector;
vector<int> ints;
public:
template <class Archive>
void serialize( Archive &archive )
{
archive( CEREAL_NVP( x ), CEREAL_NVP( y ), CEREAL_NVP( z ), CEREAL_NVP( ints ) );
}
// Add one element to the private vector
void populateVector( const int value ) {
ints.push_back( value );
}
};
int main()
{
MyClass MyObject{};
MyObject.populateVector( 101 );
MyObject.populateVector( 202 );
MyObject.populateVector( 303 );
// For brevity I just print the serialization to the standard output instead of the binary file
cereal::JSONOutputArchive oarchive( cout );
oarchive( MyObject );
return 0;
}
此代码应发出以下输出:
{
"value0": {
"x": 0,
"y": 0,
"z": 0,
"ints": [
101,
202,
303
]
}
}