元件是一個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