考虑
enum My_Enum {
x1, x2
};
template<class T, My_Enum X>
class A {
void f1();
void f2();
};
template<class T>
class A<T,x1> {
void g();
}
我想在部分专用模板中使用主模板的成员函数f1()
和f2()
。我该怎么办?
一种解决方案是不进行部分专业化,然后:
template<class T>
class AA<T> : public A<T,x1> {
void g();
}
但它有一个缺点,当我通过泛型编程实现各种A<T,X>
时,我的A<T,x1>
不再是AA<T>
类型,因此我无法应用{{ 1}}
有什么想法吗?
答案 0 :(得分:4)
如何为定义这些方法的A类创建基类?
template <class T, My_Enum X>
class A_Base {
void f1();
void f2();
};
template<class T, My_Enum X>
class A : public A_Base<T, X> {
};
template<class T>
class A<T,x1> : public A_Base<T, x1> {
void g();
};
答案 1 :(得分:2)
您可以创建基类:
template<class T, My_Enum X>
class BaseA {
void f1();
void f2();
};
template<class T, My_Enum X>
class A : BaseA<T,X> {
};
template<class T>
class A<T,x1> : BaseA<T,x1> {
void g();
};