假设我们有以下示例类:
class A {
public:
explicit A(int foo) { }
void test() {
cout << "I'm in A" << endl;
}
};
class B {
public:
explicit B(string bar) { }
void test() {
cout << "I'm in B" << endl;
}
};
我想定义一个子类来继承一个模板化的类 可以专门作为A或B之一。我面临的问题是A 和B有不同的构造函数参数,因此构建Child的构造函数是 证明有点烦恼。如果我做以下事情,事情就会奏效:
template <class ParentClass>
class Child : public ParentClass {
public:
Child<B>() : ParentClass("foo") {
}
};
int main() {
Child<B> c;
c.test();
return 0;
}
但是,我也想做Child<A> c
之类的事情。这是
可能的?
谢谢!
答案 0 :(得分:5)
您可以专注于每个班级:
template <class ParentClass>
class Child : public ParentClass {
public:
Child();
};
template <>
Child<A>::Child() : A(42) {}
template <>
Child<B>::Child() : B("42") {}
答案 1 :(得分:3)
您可以按如下方式尝试模板化构造函数:
#include <iostream>
using namespace std;
class A {
public:
explicit A(int foo) { }
void test() {
cout << "I'm in A" << endl;
}
};
class B {
public:
explicit B(string bar) { }
void test() {
cout << "I'm in B" << endl;
}
};
template <class Parent>
class Child
: public Parent {
public:
template <class... Args>
Child(Args... args)
: Parent(args...) {
}
};
int main() {
Child<A> a_child(42);
Child<B> b_child("42");
a_child.test();
b_child.test();
}
答案 2 :(得分:1)
如果您想让用户决定参数,您可以使用委托构造函数:
template <class ParentClass>
class Child : public ParentClass {
public:
using ParentClass::ParentClass;
};