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

How to get value from reference in c++

本文关键字:引用 获取 c++      更新时间:2023-10-16

我有一个函数,它返回一个常量&到对象。比方说,

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:UsersY.h(580) : see reference to function template instantiation 'Archive &boost::archive::detail::interface_iarchive<Archive>::operator &<const Id>(T &)' being compiled
            with
            [

如何序列化Id?

 ar & y->GetId(); 

应该是

  ar & y.GetId();

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

问题是它接收的值是引用,而不是CONST引用。

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

尝试使用以下

Id & GetId(); 

然后是以下之一

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

如果你不喜欢破坏封装,那么要么使用protected、friends,要么将其复制到另一个值并将该值作为引用传递

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

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

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

或者将BOOST _SERIALIZATION_SPLIT_MEMBER输入/输出一分为二。