元件是一个std::array
其中包含子类的IMyClass
的实例:填充阵列与在给定的某些位置
std::array<std::shared_ptr<IMyClass>, 20> myArr;
在索引位置0,5和10
std::make_shared<RareSubClass>()
应当分配,上所有其他指数
std::make_shared<FrequentSubClass>()
实现此目标的最佳方法是什么?
元件是一个std::array
其中包含子类的IMyClass
的实例:填充阵列与在给定的某些位置
std::array<std::shared_ptr<IMyClass>, 20> myArr;
在索引位置0,5和10
std::make_shared<RareSubClass>()
应当分配,上所有其他指数
std::make_shared<FrequentSubClass>()
实现此目标的最佳方法是什么?
这很容易用一个小的辅助函数来初始化数组在运行时:
void init_array(std::array<std::shared_ptr<IMyClass>, 20>& arr) {
int slot = 0;
for(auto& subclass : arr) {
switch(slot) {
case 0:
case 5:
case 10:
subClass = std::make_shared<RareSubClass>();
break;
default:
subClass = std::make_shared<FrequentSubClass>();
break;
}
++slot;
}
}
Thx!我使用当前数组位置的循环变量。 – user1056903
@user既然它是'std :: array',并且在编译时所有东西都可以被推导出来,我甚至可以考虑使用带'0,5,10'参数的可变参数模板类的元编程解决方案。但我怀疑这是值得迄今为止的努力(尽管这将是一个有趣的实验)。 –
如何将指数为那些需要成为'RareSubClass'元件来提供?它是否被硬编码? – AndyG
您可以使用运行时初始化吗? –
@AndyG是的,RareSubClass实例总是在提到的位置。 – user1056903