C++:从模板类继承可能的不同构造函数参数

the*_*ull 1 c++ inheritance templates

假设我们有以下示例类:

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;
    }   
};
Run Code Online (Sandbox Code Playgroud)

我想定义一个子类来继承一个模板化的类,它可以被专门化为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;
}
Run Code Online (Sandbox Code Playgroud)

但是,我也希望能够做类似的事情Child<A> c.这可能吗?

谢谢!

Jar*_*d42 5

您可以专注于每个班级:

template <class ParentClass>
class Child : public ParentClass {
  public:
    Child();
};

template <>
Child<A>::Child() : A(42) {}

template <>
Child<B>::Child() : B("42") {}
Run Code Online (Sandbox Code Playgroud)

演示