这是代码:SFINAE模板参数(enable_if)不变量符
#include <iostream>
#include <type_traits>
template <class T>
typename std::enable_if<std::is_integral<T>::value,bool>::type
is_odd (T i) {return bool(i%2);}
// 2. the second template argument is only valid if T is an integral type:
template < class T,
class = typename std::enable_if<std::is_integral<T>::value>::type>
bool is_even (T i) {return !bool(i%2);}
int main() {
short int i = 1; // code does not compile if type of i is not integral
std::cout << std::boolalpha;
std::cout << "i is odd: " << is_odd(i) << std::endl;
std::cout << "i is even: " << is_even(i) << std::endl;
return 0;
}
我努力学习的enable_if
正确使用,如果它用作返回类型说明我不解的是:编译会忽略代码。意思是,函数不会在二进制文件中。
如果它在模板参数中使用,我有点困惑。根据上面的代码,它说有the second template argument is only valid if T is an integral type
但我很困惑第二个参数的目的是什么?
我删除了它,并把它改为:
template < class T>
bool is_even (T i) {return !bool(i%2);}
,它仍然能正常工作。有人能澄清我的真正目的是什么?它上面也没有变量说明符。
或者,也许它只是作为一个检查,如果生病做类似
template < class T,
class B= typename std::enable_if<std::is_integral<T>::value>::type>
让我在我的代码中访问B(可以是真或假的)?
'class = std :: enable_if_t * = nullptr'我从此代码中获得“template argument1 is invalid” –
@CarloBrew删除'class ='部分 – 0x499602D2
为什么它必须是一类?我看到,我注意到的一件事就是。像这样的事件是否意味着用在'consexpr'上? –