具有常用功能的专用模板 类
Specialized template classes with common functions
是否可以为模板专门化一些功能 class 而无需专门化整个功能?
例如:
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
}
或类似的东西?
没有。但有办法解决它。
从模板 class 方法中将逻辑移交给自由函数模板专业化。
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>();
}
};
要回答评论 - 如果您想部分专门化 class,您可以将公共逻辑委托给模板库 class。
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();
};
是否可以为模板专门化一些功能 class 而无需专门化整个功能?
例如:
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
}
或类似的东西?
没有。但有办法解决它。
从模板 class 方法中将逻辑移交给自由函数模板专业化。
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>();
}
};
要回答评论 - 如果您想部分专门化 class,您可以将公共逻辑委托给模板库 class。
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();
};