Je suis en train d'écrire une bibliothèque d'algorithmes évolutionnaires parallèles utilisant C++, MPI et CUDA. J'ai besoin d'extraire les données brutes de ma conception orientée objet et de les coller dans un tableau plat (ou std :: vector en utilisant stl-mpi) pour qu'il soit envoyé aux nœuds ou au périphérique cuda.C++: paramètres de modèle variable (pour l'algorithme génétique)
La conception complète est assez complexe avec beaucoup d'héritage à garder la bibliothèque flexible. Mais les classes d'intérêt sont:
Classe de génome - contient le vecteur de données. par exemple. flotteurs ou bouses.
Classe de population - contient un vecteur d'objets génomiques et est initialisé avec un objet génome.
d'abord un objet génome est créé, puis une référence à elle est transmise au constructeur de la classe de la population qui crée son propre vecteur des génomes basés sur un passé. (L'espoir qui fait sens!)
Je pensais que je voudrais ajouter un autre vecteur membre, dire rawData
à la classe de la population. Mais le type de rawData devrait dépendre du type de données stockées dans les génomes (ou l'objet original du génome).
Ici réside le problème, autant que je sache, il n'y a aucun moyen de définir dynamiquement le type passé au modèle.
mon pseudo-code serait
class genome {
std::vector<bool> data;
}
template <class T>
class population {
std::vector<genome> population;
std::vector<T> rawData;
void PackDataIntoRawData();
};
puis quand je crée la population (qui est en fait un objet membre d'une autre classe), je qualifierais:
genome myBitGenome();
population<type of myBitGenome.data> pop(myBitGenome);
Y at-il de toute façon à faites-le, ou quelqu'un peut-il suggérer une autre façon de l'implémenter?
Merci d'avance
L'inverse. Ma population contient un vecteur de génomes, qui contiennent chacun des données et un tas d'autres méthodes. Je dois extraire seulement les données de ces génomes et les mettre dans un vecteur normal (pas un vecteur d'objets, je ne peux pas envoyer d'objets avec MPI). En même temps, je ne peux pas mettre des types de membres fixes dans ma population (par exemple le vecteur rawData) parce que la classe de population est utilisée avec de nombreux types de génomes différents. –
zenna