[英]Specialized template classes with common functions
是否可以专门为模板类提供一些功能而无需专门针对整个事物?
例如:
template <typename T>
struct A {
int foo();
};
template <typename T>
int A<T>::foo() { return 1;}
template <>
struct A<int> {
int bar() { return 2; };
};
main() {
A<int> a;
a.foo(); //1
a.bar(); //2
A<double> b;
b.foo(); //1
b.bar(); // ERROR
}
还是类似的东西?
不。但是有办法解决。
从模板类方法中将逻辑传递给自由功能模板专业化。
template<class T>
int delegated_foo() {
return 1;
}
// now specialise
template<>
int delegated_foo<int>() {
return 2;
}
template <typename T>
struct A {
int foo() {
return delegated_foo<T>();
}
};
要回答评论-如果要部分专门化一个类,可以将常见逻辑委派给模板基类。
template<class T>
struct a_common {
void common_function() {
// define here. Compiler will generate 1 for each T
}
};
template<class T>
struct A : public a_common<T>
{
int something_i_might_specialise();
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.