一次启用许多 class 的成员字段,具体取决于模板 <T>

enable MANY class's member fields at once, depending on template <T>

这里是MCVE。它有效:-

template<bool c3> class Has3 { };
template<> class Has3<true> { public: int cat3; };

template<bool c2,bool c3> class Has2 : public Has3<c3>{ };
template<bool c3> struct Has2<true,c3> : public Has3<c3>{ public: int dog2; };

template<bool c1,bool c2,bool c3> class Has1 : public Has2<c2,c3>{ };
template<bool c2,bool c3> struct Has1<true,c2,c3> : 
     public Has2<c2,c3>{public:  int rat1; }; //<- ugly, in my opinion.

int main(){
    Has1<false,true,false> h; 
    h.dog2=5;
    //h.cat3=4;  //<- compile error (which is good)
}

上面的不优雅的MCVE修改自enable class's member depending on template,它一次只能启用一个字段。
(两个答案我都看了,但是它的第二个解决方案占用了太多内存。)

如何轻松切换多个字段on/off?
令人遗憾的是,这个 MCVE 很快就变得一团糟。

在我的真实案例中,我有大约 5-6 个不同类型的唯一字段。
为简单起见,cat3dog2、...的类型不依赖于 T.

你可能有更简单的东西:

class Cat  { public: int cat3; };
struct Dog { public: int dog2; };
struct Rat { public: int rat1; };

template <typename... Bases>
class Group : public Bases... {};

然后

Group<Dog, Rat> h;

h.dog2=5;