我在寫一個使用C++,MPI和CUDA的並行進化算法庫。我需要從面向對象的設計中提取原始數據,並將其粘貼到平面數組(或使用stl-mpi的std :: vector)中,以便將其發送到節點或cuda設備。C++:變量模板參數(用於遺傳算法)
完整的設計很複雜,有很多繼承來保持庫的靈活性。但感興趣的類別是:
基因組類 - 包含數據的向量。例如漂浮物或布爾。
人口分類 - 包含基因組對象的向量,並初始化爲一個基因組對象。
首先創建一個基因組對象,然後對它的引用傳遞給羣體類構造函數,該構造函數根據傳遞的基因組創建自己的基因組向量。 (希望是有道理的!)
所以我想我會添加另一個成員矢量,說rawData
人口類。但是rawData的類型需要依賴於基因組中存儲的數據類型(或原始基因組對象)。
這裏存在的問題,據我所知,沒有辦法動態設置傳遞給模板的類型。
我的僞代碼將是
class genome {
std::vector<bool> data;
}
template <class T>
class population {
std::vector<genome> population;
std::vector<T> rawData;
void PackDataIntoRawData();
};
然後當我創建的人口(這實際上是另一個類的成員對象),我稱之爲:
genome myBitGenome();
population<type of myBitGenome.data> pop(myBitGenome);
反正是有做到這一點,或任何人都可以建議另一種方式來實現。
在此先感謝
相反。我的人口包含一組基因組,其中每個基因組都包含數據和一堆其他方法..我需要從這些基因組中提取數據,並將其放入一個法向量(不是對象向量,不能將對象MPI)。同時,我不能在我的人羣中輸入固定的成員類型(例如,矢量 rawData),因爲人口羣與許多不同類型的基因組一起使用 –
zenna
2009-04-22 08:43:03