2016-11-08 33 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'參數的可變參數模板類的元編程解決方案。但我懷疑這是值得迄今爲止的努力(儘管這將是一個有趣的實驗)。 –