c++ - 我可以使用 SFINAE 有选择地定义模板类中的成员变量吗?

标签 c++ sfinae

所以我想要做的是创建一个模板类,它可能包含也可能不包含基于传入的模板参数的成员变量。如下所示:

template<typename T, bool flag>
class base
{
   foov<std::enable_if<flag, T>::type> m_var;
};

上面的代码无法通过编译器。

有谁知道我怎样才能实现这个目标?

最佳答案

有一个基类,其中基于模板参数启用/禁用成员:

template<typename T, typename Enable = void>
class base_class;

// my favourite type :D
template<typename T>
class base_class<T, std::enable_if_t<std::is_same<T, myFavouriteType>::value>>{
    public:
        int some_variable;
};

// not my favourite type :(
template<typename T>
class base_class<T, std::enable_if_t<!std::is_same<T, myFavouriteType>::value>>{
    public:
        // no variable
};

template<typename T>
class derived_class: public base_class<T>{
    public:
        // do stuff
};

这应该为您提供一种根据类型启用/禁用成员的好方法。

关于c++ - 我可以使用 SFINAE 有选择地定义模板类中的成员变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25492589/

相关文章:

c++ - QMetaObject::connectSlotsByName 错误

c++ - 使用 Visual Studio 2012 Express Version 引用 dll

c++ - 如果不为真,再次提示直到为真

c++ - 没有定义的类函数如何不导致错误

c++ - 具有 boost 功能的 SFINAE 如果

c++ - 使用省略号的回退函数 : can we force the size of the parameters pack?

c++ - 根据特征隐藏类模板实例

c++ - Herb Sutter 的 CppCon Perfect Forwarding 幻灯片

c++ - 您如何以编程方式确定二进制输出中的构建系统等效性?

c++ - 是否可以检查是否为给定类型和参数定义了用户文字?