可以在继承的类中使用具有不同参数的构造函数吗? 有没有一种方法来重写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) 返回使共享(a); } E类 { INTA,b; E(intx,inty):a(x),b(y); } B类:公共A{ int b; 共享\u ptr createEntity(a)覆盖 返回使共享(a、b); }

可以在继承的类中使用具有不同参数的构造函数吗? 有没有一种方法来重写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) 返回使共享(a); } E类 { INTA,b; E(intx,inty):a(x),b(y); } B类:公共A{ int b; 共享\u ptr createEntity(a)覆盖 返回使共享(a、b); },c++,inheritance,constructor,overriding,virtual,C++,Inheritance,Constructor,Overriding,Virtual,大多数实体的标准构造函数只需要一个变量,而其他类的实体需要构造多个变量。没有条件编译可以实现这一点吗 编辑:其他实体只使用一个变量“a”实现其构造函数,因此我基本上希望在大多数情况下使用a::createEntity(a),在特殊情况下使用B::createEntity。这相当容易实现(甚至没有条件编译) 你所需要做的就是发明一种参数结构,然后把你所有的参数都放进去 比如: struct InitInfo { int x_; int y_;//may not always be used

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


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

这相当容易实现(甚至没有条件编译)

你所需要做的就是发明一种参数结构,然后把你所有的参数都放进去

比如:

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});
返回make_shared(InitInfo{a,b});

是否希望
::createEntity
::B::createEntity
隐藏或覆盖?我的理解正确吗?如何通过基类指针调用这个重写函数?如果你不这样做,那么继承和虚拟函数对于这个工作来说是错误的工具。然后完全由派生类以其选择的任何方式创建T。如前所述,模板类A必须致力于构造T,这意味着所有可能的T都必须以A可以构造它的方式来编写。我猜他希望在E构造函数只有一个参数的情况下丢弃“b”参数。@YSC是的,我基本上想隐藏函数