0

我有一个函数,它返回一个 const& 给一个对象。比方说,

class Y {
    private:
        Id id;
    public:
        Id const& GetId() const;
}  

现在这个 Y 对象是另一个类的一部分,比如说 X 类,它需要被 boost 序列化。

class X {
    template <class Archive>
    void serialize(Archive& ar, uint32 version)
     {
         ar & y->GetId();
     }
     Y y;
}

但是,boost 对此抱怨并给出错误:

error C2027: use of undefined type 'boost::STATIC_ASSERTION_FAILURE<x>'


C:\Users\Y.h(580) : see reference to function template instantiation 'Archive &boost::archive::detail::interface_iarchive<Archive>::operator &<const Id>(T &)' being compiled
            with
            [

如何序列化 Id?

4

3 回答 3

4
 ar & y->GetId(); 

应该

  ar & y.GetId();
于 2013-08-22T17:16:16.673 回答
2

boost 序列化的目的是使用引用序列化到存档。

问题是它接收值作为引用而不是 CONST 引用。

Id const& GetId() const; // Returns a const reference

尝试使用以下

Id & GetId(); 

然后是以下之一

ar & y.GetId();
ar << y.GetId();

如果你不喜欢封装的破坏,那么要么使用受保护的朋友,要么将其复制到另一个值并将该值作为参考传递

Id copy = y.GetId();
ar & copy;
于 2013-08-22T17:22:33.030 回答
0

除了问题->(请参阅@thomas),您还需要两个:

Id const& GetId() const;
Id& GetId();

或者你将 BOOST_SERIALIZATION_SPLIT_MEMBER 输入/输出分成两个。

于 2013-08-22T17:26:25.173 回答