我有一个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?
答案 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输入/输出分成两部分。