Considérons le code suivant:
template class MyClass { public: void myFunction(); template<class = typename std::enable_if::type> void addedFunction(); protected: double myVariable; /* SOMETHING */ addedVariable; };
Dans ce code, le paramètre de modèle AddMembers
permet d’append une fonction à la classe lorsqu’elle est true
. Pour ce faire, nous utilisons un std::enable_if
.
Ma question est la suivante: la même chose est-elle possible (peut-être avec une astuce) pour les membres de données? (de telle sorte que MyClass
aura 1 membre de données ( myVariable
) et MyClass
aura 2 membres de données ( myVariable
et addedVariable
)?
Une classe de base conditionnelle peut être utilisée:
struct BaseWithVariable { int addedVariable; }; struct BaseWithoutVariable { }; template class MyClass : std::conditional::type { // etc. };
Tout d’abord, votre code ne sera pas compilé pour MyClass
. Le trait enable_if
est utile pour les arguments déduits , pas pour les arguments de modèle de classe.
Deuxièmement, voici comment vous pouvez contrôler les membres:
template struct Members { }; template <> struct Members { int x; }; template struct Foo : Members { double y; };