c++ - C++ 将派生类列表转换为多态指针列表
问题描述
考虑以下代码:
class Base {
virtual bool someFunc() = 0;
virtual ~Base() = default;
};
class Derived1 : public Base {
bool someFunc() override { ... }
};
class Derived2 : public Base {
bool someFunc() override { ... }
};
class MyClass {
public:
MyClass(std::vector<Base> derivedClasses) {
for (const auto dClass : derivedClasses) {
m_derivedClasses.emplace_back(std::make_shared<???>(dClass));
}
}
std::vector<std::shared_ptr<Base>> m_derivedClasses;
};
int main() {
std::vector<Base> listOfDerivedClasses = {Derived1(), Derived2()};
MyClass mClass(listOfDerivedClasses)
for (const auto dClass : m_derivedClasses) {
dClass.someFunc();
}
}
本质上,我有一个类,它在其构造函数中给出了派生类列表,我想将其转换为指向这些派生类的指针列表,以便我可以someFunc()
在main()
. 我似乎无法弄清楚如何让它工作,我需要一些模板魔法吗?
编辑:我可以让MyClass
构造函数采用 astd::vector<Base*>
并可能让事情像那样工作,但它需要消费者自己创建指针,我希望能保护它们免受这种影响。在我工作的另一个类中,我想要多态行为,我能够使用模板实现这样的目标:
template <typename derivedTypeT, std::enable_if_t<std::is_base_of_v<Base, derivedTypeT>, bool> = true>
MyOtherClass(const derivedTypeT &dClass) : m_dClass(std::make_shared<derivedTypeT>(dClass)) {}
我不知道如果输入是一个,我怎么能做到这一点std::vector
,因为它显然可以有多个派生类型。这是我可以用可变参数模板做的事情吗?
解决方案
推荐阅读
- javascript - Webstorm doesn't recognize prop type of ...props
- c++ - C++20 模块的例子?
- testing - 如何使用 testcafe 电子插件防止内容安全策略错误?
- prestashop - 在 Cart 类中获取运费
- php - 如何使用日期 laravel 更新数据库列状态
- r - Aggregate in R with date column but by the identifier column
- spring - Vaadin + Spring = 获取空指针异常
- python - What unit are those GPS-coordinates?
- webassembly - 在 WebAssembly 和 JavaScript 之间传输字节数组 (Uint8Array)
- python - split with specific comma not within quotes in python