如何从 C++ 中的引用中获取值
Posted
技术标签:
【中文标题】如何从 C++ 中的引用中获取值【英文标题】:How to get value from reference in c++ 【发布时间】:2013-08-22 17:08:02 【问题描述】:我有一个函数,它返回一个 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?
【问题讨论】:
或许回顾一下Archive class 的使用情况会有所帮助。Id
有 serialize
功能吗?
您也可以发布整个编译器错误消息吗?
是的。确实如此。它是一大段代码的一部分。但是我们确实有逻辑来序列化 Id。编译器错误是:C:\Users\boost\windows\include\boost/archive/detail/check.hpp(162):错误 C2027:使用未定义类型 'boost::STATIC_ASSERTION_FAILURE->
应用于对象?我们能看到Id
的序列化函数吗?
【参考方案1】:
ar & y->GetId();
应该是
ar & y.GetId();
【讨论】:
同意。我实际上在我的代码中使用了对对象 Y 的引用。所以它是-> 但是对于给定的 sn-p 它应该是 y。而不是 y->【参考方案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;
【讨论】:
【参考方案3】:除了问题->(见@thomas)你需要两个:
Id const& GetId() const;
Id& GetId();
或者你将 BOOST_SERIALIZATION_SPLIT_MEMBER 输入/输出分成两个。
【讨论】:
以上是关于如何从 C++ 中的引用中获取值的主要内容,如果未能解决你的问题,请参考以下文章
如何从变量中取值如果java中的Statement [关闭]