我正在考虑创建模板类包装器,该包装器应该继承所有模板参数功能并在其上添加一些内容。对于结构和类,这将非常简单
class foo{ void bar(){} };
template<class T>
class baz : public T { void zab(){} };
int main(){
baz<foo> a;
}
现在,我的问题是,是否有任何方法可以让内置整数类型的运算符保持不需大量手动专门模板的操作,就可以像这样:
int main(){
baz<int> a;
int b = a + 2;
}
可以做到吗?如果是这样,怎么办? (我知道有必要通过一些魔术专业来做到这一点。我只是在问是否可以通过一个局部专业来做到这一点)
答案 0 :(得分:1)
对于SFINAE朋友类,您可以使用模板来减少专业化程度:
template <class T, typename Enabler = void>
class baz : public T { void zab(){} };
// specialization for integral type
template <class T>
class baz<T, std::enable_if_t<std::is_integral<T>::value>>
{
friend auto operator + (T lhs, T rhs) { /*..*/}
operator T() const { return value; }
// ...
T value;
};