Ajouter / supprimer des membres de données avec des parameters de modèle?

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; };