如何从c ++中的引用中获取值

时间:2013-08-22 17:08:02

标签: c++ boost reference boost-serialization

我有一个func,它返回一个const&到一个对象。让我们说,

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

现在这个Y Object是另一个类的一部分,比如说X类,需要通过boost序列化。

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

然而,助推器抱怨这个并给出错误:

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?

3 个答案:

答案 0 :(得分:4)

 ar & y->GetId(); 

应该是

  ar & y.GetId();

答案 1 :(得分:2)

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

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

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

尝试使用以下

Id & GetId(); 

然后是以下之一

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

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

Id copy = y.GetId();
ar & copy;

答案 2 :(得分:0)

除了问题 - &gt; (见@thomas)你需要有两个:

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

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