派生 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
我有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