考虑以下代码:
template<bool AddMembers> class MyClass
{
public:
void myFunction();
template<class = typename std::enable_if<AddMembers>::type> void addedFunction();
protected:
double myVariable;
/* SOMETHING */ addedVariable;
};
在此代码中,模板参数
AddMembers
允许在类true
上添加一个函数。为此,我们使用std::enable_if
。我的问题是:数据成员变量是否可能相同(也许有技巧)? (以这种方式
MyClass<false>
将具有1个数据成员(myVariable
),而MyClass<true>
将具有2个数据成员(myVariable
和addedVariable
)? 最佳答案
可以使用条件基类:
struct BaseWithVariable { int addedVariable; };
struct BaseWithoutVariable { };
template <bool AddMembers> class MyClass
: std::conditional<AddMembers, BaseWithVariable, BaseWithoutVariable>::type
{
// etc.
};