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

Partial specialization: use the primary template members

本文关键字:成员 专用      更新时间:2023-10-16

>考虑

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> 类型,因此我无法应用A<T,x1>.g()

知道吗?

如何为类 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();
};

您可以创建一个基类:

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