【发布时间】:2009-04-22 08:24:47
【问题描述】:
我正在使用 C++、MPI 和 CUDA 编写一个并行进化算法库。我需要从面向对象的设计中提取原始数据并将其粘贴到一个平面数组(或使用stl-mpi 的 std::vector)中,以便将其发送到节点或 cuda 设备。
完整的设计相当复杂,有很多继承来保持库的灵活性。但感兴趣的类别是:
基因组类 - 包含数据向量。例如浮点数或布尔值。
Population 类 - 包含基因组对象的向量,并使用基因组对象进行初始化。
首先创建一个基因组对象,然后将对其的引用传递给种群类构造函数,该构造函数根据传递的对象创建自己的基因组向量。 (希望这是有道理的!)
所以我想我会添加另一个成员向量,比如 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);
有没有办法做到这一点,或者任何人都可以提出另一种实现方式。
提前致谢
【问题讨论】:
标签: c++ templates generics oop