为了创建自定义和轻量级的Boost.Serialization,我到目前为止尝试了一些方法。让我们给出以下存根:
template<typename Archive>
class BasicStream {
public:
template<typename Any>
Archive& operator&(Any& data) {
return Serialize(*this, data);
}
};
通常,通过调用全局Serialize
函数可以正确处理几乎所有数据类型,但是有一些例外。对于某些数据类型,我希望根据指定的Archive
以不同方式处理它们。我试着写
class OutputStream : public BasicStream<OutputStream> {
public:
template<>
OutputStream& operator&(MyExceptionalType& data) {
// ... do something super special ... //
return *this;
}
};
然而我收到错误IntelliSense: declaration is incompatible with function template "OutputStream &BasicStream<Archive>::operator&(Any &data) [with Archive=OutputStream]"
。这种尝试继承operator&
的通用版本但是在派生类中专门化它有什么问题?
答案 0 :(得分:1)
你可以这样做:
template<typename Archive>
class BasicStream {
public:
template<typename Any>
Archive& operator&(Any& data);
};
// generic implementation
template<typename Archive>
template<typename Any>
Archive& BasicStream<Archive>::operator&(Any& data) {
return Serialize(*this, data);
}
class OutputStream : public BasicStream<OutputStream> {
};
// Specialize the original template, don't overwrite it
template<>
template<>
OutputStream& BasicStream<OutputStream>::operator&(MyExceptionalType& data) {
// ... do something super special ... //
return static_cast<OutputStream&>(*this);
}