[我试图理解std::enable_if
,cppreference.com有一个示例,这种使用比函数重载有什么好处?下面的代码部分正在做同样的事情。
struct T { enum { int_t,float_t } m_type; template <typename Integer, std::enable_if_t<std::is_integral<Integer>::value, int> = 0 T(Integer) : m_type(int_t) {} template <typename Floating, std::enable_if_t<std::is_floating_point<Floating>::value, int> = 0 T(Floating) : m_type(float_t) {} // OK };
与构造函数重载相同]
struct T1 {
enum { int_t, float_t } m_type;
T1(int) :m_type(int_t)
{
cout << "int ctor" << endl;
}
T1(float) :m_type(float_t)
{
cout << "float ctor" << endl;
}
};
我试图理解enable_if,cppreference.com上有一个示例,这种使用比函数重载有什么好处?下面的代码部分正在做同样的事情。结构T {枚举{...
您的两个示例不相同。对于第一个示例,该类将排除任何整数或浮点类型exactly
在这种情况下,实际上并没有真正的优势,因为整数类型会转换为例如int
首先,然后将调用正确的重载构造函数。