派生 class 与模板化 parent class

derived class with templated parent class

我有parentclass

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

现在当我创建派生的 class 时,是否允许在 parent class 上初始化模板?

enum Benum {e1, e2, e3};

class B : public A<Benum >
{
public:
  B(int* a):A(a);
  ~B();
}

我得到以下编译错误

undefined reference to `B::B(int*)'

在我包含 class 防御头文件的另一个文件中。

B(int* a):A(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

Live Example