2016-11-08 57 views
0

元件是一个std::array其中包含子类的IMyClass的实例:填充阵列与在给定的某些位置

std::array<std::shared_ptr<IMyClass>, 20> myArr; 

在索引位置0,5和10

std::make_shared<RareSubClass>() 

应当分配,上所有其他指数

std::make_shared<FrequentSubClass>() 

实现此目标的最佳方法是什么?

+0

如何将指数为那些需要成为'RareSubClass'元件来提供?它是否被硬编码? – AndyG

+0

您可以使用运行时初始化吗? –

+0

@AndyG是的,RareSubClass实例总是在提到的位置。 – user1056903

回答

2

这很容易用一个小的辅助函数来初始化数组在运行时:

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; 
     } 
} 
+0

Thx!我使用当前数组位置的循环变量。 – user1056903

+0

@user既然它是'std :: array',并且在编译时所有东西都可以被推导出来,我甚至可以考虑使用带'0,5,10'参数的可变参数模板类的元编程解决方案。但我怀疑这是值得迄今为止的努力(尽管这将是一个有趣的实验)。 –