Я пишу параллельную библиотеку эволюционных алгоритмов, используя C ++, MPI и CUDA. Мне нужно извлечь необработанные данные из моего объектно-ориентированного дизайна и вставить их в плоский массив (или std :: vector, используя stl-mpi ) для отправки их на узлы или устройство cuda.
Полный дизайн довольно сложен с большим количеством наследования, чтобы обеспечить гибкость библиотеки. Но интересующие вас классы:
Класс генома - содержит вектор данных. например плавает или кипит.
Класс населения - содержит вектор объектов Генома и инициализируется объектом генома.
Сначала создается объект генома, затем ссылка на него передается конструктору класса популяции, который создает свой собственный вектор генома на основе переданного. (Надеюсь, что это имеет смысл!)
Поэтому я подумал, что добавлю еще один элемент-член, скажем 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);
Есть ли в любом случае, чтобы сделать это, или кто-то может предложить другой способ реализовать это.
Заранее спасибо