部分专业化:使用主要模板成员

时间:2013-09-04 15:23:04

标签: c++ templates c++11 generic-programming

考虑

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}}

有什么想法吗?

2 个答案:

答案 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();
};