我想根据模板参数的值排除或包含模板类中的某些成员。这是一个例子:
enum t_chooser {A, B, all};
template <t_chooser choice>
class C {
// include if choice==A
int v1;
// include if choice==B
long v2;
// include if choice==B
int v3;
// include for every value of choice
bool v4;
};
如果模板参数choice
等于all
,则应包括所有成员。
有没有办法在C ++ 11中实现这一点,甚至可能使用std::enable_if
?
我在这里看到了成员函数的解决方案:std::enable_if to conditionally compile a member function
答案 0 :(得分:4)
显然,您可以为每种类型的C
专门研究整个t_chooser
课程,但这很痛苦,因为您必须复制所有内容。相反,您可以将专门化放入辅助结构中,然后在C
enum t_chooser {A, B, all};
template <t_chooser choice>
struct Vars; // undefined
template<>
struct Vars<A> { // just the A vars
int v1;
};
template<>
struct Vars<B> { // just the B vars
long v2;
int v3;
};
template<>
struct Vars<all> : Vars<A>, Vars<B> { }; // derive both, get everything
template <t_chooser choice>
class C : private Vars<choice> { // or public if you want to expose them
bool v4;
};