Vu:passant std :: vecteur pour tout type à une fonction
template<typename T> class A {
B b;
std::vector<T> vec1;
std::vector<T> vec2;
}
Je voudrais B d'avoir une fonction de membre qui remplissent() qui prend une référence à ceux des vecteurs et remplit vec2 avec des valeurs de T en fonction de certaines informations contenues dans b.
Une façon de le faire est de remplir la surcharge() pour chaque argument possible T:
fill(const std::vector<float>& a, std::vector<float>& b)
et ainsi de suite, mais cela signifie beaucoup de duplication inutile que les opérations sont les mêmes pour tous les possibles T. A l'intérieur de fill() Je pourrais utiliser vector :: value_type pour les calculs mais je ne sais pas comment le déclarer de telle sorte qu'il prenne tout type de std :: vector. La manière évidente serait d'utiliser une fonction gratuite avec des modèles. Y a-t-il une manière plus simple de faire ceci?
Plus d'informations: B fait partie d'une hierachy d'héritage avec des fonctions virtuelles pures et enveloppé dans un pointeur intelligent à la classe de base. Les utilisateurs seraient invités à instancier B avec le même type que A (ce qui ajoute une possibilité d'erreur) et ne serait pas évident pour les utilisateurs des classes, donc je préfère éviter cela. – pmr
Je réalise que refactoriser de grandes hiérarchies est un problème, mais vous pouvez également essayer d'utiliser une classe de politique comme paramètre de modèle au lieu de passer dans des pointeurs intelligents et apparemment (en fonction de votre description). –