** J'ai eu quelques suggestions pour faire ma pure fonction générique, qui fonctionnerait, mais je préférez limiter la fonction pour n'accepter que Base et ses enfants.Passant sous-classes de modèle de classe variadique pour fonction qui accepte uniquement la classe de base (par déduction paquet paramètre/inférence)
de la difficulté à faire une fonction qui peut accepter des arguments d'un type de base de classe modèle variadique, tandis que la fonction sera effectivement appelée avec les classes qui dérivent de la base. J'ai essayé quelques petites choses. Voici l'idée générale. Compte tenu:
template<typename... Args> struct Base {
std::tuple<Args...> data;
... //other stuff
};
struct DerivedA : Base<string, int> {
};
struct DerviedB : Base<bool, string, int> {
};
Quelle est la bonne façon de créer une fonction qui fait cela:
string moosh_together(Base A, Base B) { //I only need access to Base's members
return get<0>(A.data) + get<1>(B.data);
}
main() {
DerivedA aThing;
get<0>(aThing.data) = "foo";
DerivedB bThing;
get<1>(bThing.data) = "bar'd";
cout << moosh_together(aThing, bThing) << endl;
}
Sortie:
foobar'd
J'ai essayé quelques variations de la fonction moosh_together, aucun de quel travail. Le laisser comme ci-dessus génère une erreur de compilateur sur les arguments de modèle manquants. Je ne sais pas comment passer à la fonction les arguments de modèle qui définissent DerivedA et DerivedB.
Autres choses que j'ai essayé (méthode de fusil de chasse):
string moosh_together(Base<> A, Base<> B) {}
//err: conversion from 'DerivedA' to non-scalar type 'Base<>' requested
template<Base<typename... Args> T1, Base<typename... Args> T2>
string moosh_together(T1 A, T2 B) {}
//err: expected paramter pack before '...'
template<Base<Args...> T1, Base<Args...> T2>
string moosh_together(T1 A, T2 B) {}
//err: 'Args' was not declared in this scope
Bordel ce titre me fait mal à la tête. –
Il y a un polymorphisme d'exécution à l'ancienne caché quelque part. Cela ne justifierait-il pas de ne pas faire passer des choses par exemplaire? – sbi
@Zachary Yates Lol, ce qui est pire est que je ne sais pas si ce titre si verbeux à cause de mon manque de complexité C de la connaissance ou réelle du problème que je suis face à –