首页 > 解决方案 > 是否可以在继承的类中使用具有不同参数的构造函数?

问题描述

有没有办法在 C++ 中覆盖返回具有不同构造函数的模板化实体的函数?

template<T> class A {
  virtual shared_ptr<T> createEntity (a)
     return make_shared<T>(a);
}

class E
{
  int a,b;
  E (int x, int y) : a(x), b(y);
}

class B : public A<E> {
  int b;
  shared_ptr<E> createEntity (a) override 
     return make_shared<E>(a,b);
}

大多数实体的标准构造函数只需要一个变量,而其他类的实体需要构造多个变量。这可以在没有条件编译的情况下实现吗?

编辑:其他实体只用一个变量“a”实现他们的构造函数,所以我基本上想在大多数情况下使用 A::createEntity (a) 并希望在特殊情况下使用 B::createEntitiy。

标签: c++inheritanceconstructoroverridingvirtual

解决方案


这很容易实现(甚至没有条件编译)。

您需要做的就是发明某种类型的参数结构并将所有参数放入其中。

就像是:

struct InitInfo {
  int x_;
  int y_;//may not always be used..
};

然后将其与 E 一起使用:

class E
{
  int a,b;
  public:
  E (InitInfo info) : a(info.x_), b(info.y_) {
  }
};

并像这样使用:

return make_shared<E>(InitInfo{a,b});

推荐阅读