通过继承专门化操作符模板
Specialize operator template via inheritance
创建Boost的自定义轻量级适配。到目前为止,我尝试了一些东西。让下面的存根被给定:
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&
的一般版本,但在派生类中专门化它有什么问题?
你可以这样做:
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);
}
相关文章:
- 是否可以对零模板参数进行模板专门化
- 尝试根据类中 typedef 的存在来专门化模板函数
- 如何基于模板化类的基类专门化成员函数
- 如何为指向复杂值的迭代器专门化算法?
- 专门化模板覆盖函数/避免对象切片
- 我能否根据其运算符()的签名专门化可变参数模板参数
- 如何使用模板化类专门化模板化函数?
- 线程 std::调用未知类型,无法专门化函数错误
- 输入两个不专门化大小的矩阵
- 如何在模板类中专门化赋值运算符?
- 如何专门化容器和枚举的模板
- Clang拒绝类模板的嵌套类仅通过专门化定义的代码是正确的吗
- 取消专门化C++模板参数
- SFINAE的变分变量模板专门化
- 类模板专门化的操作符重载
- 转换操作符模板专门化
- 对不同的特性专门化同一个操作符
- 通过继承专门化操作符模板
- 仅为专门化模板类定义转换操作符
- 如何在不重载比较操作符的情况下为std::max专门化自定义类型