c++ - 是否可以在继承的类中使用具有不同参数的构造函数?
问题描述
有没有办法在 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。
解决方案
这很容易实现(甚至没有条件编译)。
您需要做的就是发明某种类型的参数结构并将所有参数放入其中。
就像是:
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});
推荐阅读
- authentication - 无效的用户或密码或帐户由于多次登录尝试失败而被阻止
- hyperlink - 单击链接时在新选项卡或窗口中打开特定链接
- javascript - 如何在magento 2的自定义模块中覆盖第三方模块Js小部件
- javascript - ReactJs-如何为每个列表Axios post Method做映射?
- javascript - 字体真棒图标仅在调试模式下显示
- ios - 如何在 react-native 中防止 iOS 截图
- python - 未读帖子 Django
- javascript - 如果 id 与另一个对象 id 相等,则 React 获取第二个对象
- javascript - 节点 js 触发一个新的 GET 请求以从服务器获取数据
- javascript - JS中不使用every()的第一个参数怎么办