具有模板化父类的派生类

derived class with templated parent class

本文关键字:派生 父类      更新时间:2023-10-16

我有父类

template <class T_ENUM>
class A
{
public:
  A(int*);
  ~A();
}

现在当我创建一个派生类时,是否允许在父类上初始化模板?

enum Benum {e1, e2, e3};
class B : public A<Benum >
{
public:
  B(int* a):A(a);
  ~B();
}

我得到以下编译错误

对' B::B(int*)'的未定义引用

B (int *): (a),

这会产生一个编译错误。

构造函数应该这样实现:

B(int* a) : A(a) {}

编辑:

您可能还希望将您的单参数构造函数设置为explicit。例如:

class B
{
public:
    explicit B(int* a);
};

防止从int*B的隐式类型转换。


MCVE代码:

#include <iostream>
enum Benum
{
    e1,
    e2,
    e3
};
template<class T_ENUM>
class A
{
public:
    explicit A(int*)
    {
        std::cout << "A ctor" << std::endl;
    }
    virtual ~A()
    {
    }
};
class B : public A<Benum>
{
public:
    explicit B(int* a) : A(a)
    {
        std::cout << "B ctor" << std::endl;
    }
    ~B()
    {
    }
};
int main()
{
    int x = 3;
    B b(&x);
    return 0;
}

MCVE输出:

A ctor
B ctor

生活例子