考虑以下代码:

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个数据成员(myVariableaddedVariable)?

最佳答案

可以使用条件基类:

struct BaseWithVariable    { int addedVariable; };
struct BaseWithoutVariable { };

template <bool AddMembers> class MyClass
    : std::conditional<AddMembers, BaseWithVariable, BaseWithoutVariable>::type
{
    // etc.
};

10-08 08:54