【发布时间】:2020-06-23 09:41:35
【问题描述】:
有没有办法在 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。
【问题讨论】:
-
您希望
::createEntity被::B::createEntity遮蔽或覆盖?我理解正确吗? -
如何通过基类指针调用这个被覆盖的函数?如果你不这样做,那么继承和虚函数就是不适合这项工作的工具。
-
您可以使方法纯虚拟。然后完全由派生类以它选择的任何方式创建 T 。如所写,模板类 A 必须致力于构造 T,这意味着所有可能的 T 必须以 A 可以构造它的方式编写。
-
我猜他希望 'b' 参数被丢弃,以防 E 构造函数只有一个参数。
-
@YSC 是的,我基本上想隐藏函数
标签: c++ inheritance constructor overriding virtual