为了创建 Boost.Serialization 的自定义和轻量级改编,到目前为止我尝试了一些东西。给出以下 stub :
template<typename Archive>
class BasicStream {
public:
template<typename Any>
Archive& operator&(Any& data) {
return Serialize(*this, data);
}
};
一般来说,几乎所有的数据类型都可以通过调用全局 Serialize
来正确处理。功能,但也有一些异常(exception)。对于某些数据类型,我想根据指定的 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&
而是将其专门用于派生类?
最佳答案
你可以这样做:
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);
}
关于c++ - 通过继承专门化运算符模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15503854/