1、enable_if是什么:
enable_if是c++中的一个标准模板,它的一种定义方式如下:
template<bool B,class T = void>
struct enable_if{};
template<class T>
struct enable_if<true,T>{
typedef T type;
};
从上面的定义可以看出,enable_if是一个模板类,且对该模板类有一个偏特化的版本。也就是当B为true时,会使用第二个模板来进行实例化。两个的区别在于第一个结构体什么也没做,但是第二个版本却将模板类T命名为type。这导致我们在使用enable_if的type属性时,提供给模板的第一个参数不同将会得到不一样的结果。
2、enable_if的使用:
enable_if<condition,T>::type;
当condition为false时,那么由前面的模板,此时会使用第一个模板来实例化,所以结构体中什么也不会做,所以type属性没有值。当condition为true时,那么type类型就将是和T一样的类型。
3、例子
int a;
typename std::enable_if<a == 1,int>::type *a; //当a==1时,condition为true,那么type为int,所以会声明一个int* a;
typename std::enable_if<!(a == 1),double>::type *a; //a !=1时,condition为true,那么type为double,所以会声明一个double* a;
在上面的例子中,当a==1时,第一个的condition为true,所以会声明一个int* a;但是如果a != 1,那么第二个的condition成立,会声明一个double* a;
enable_if可以使用在模板函数的返回值或者参数中。从而可以通过条件来选择是否产生对应的模板函数。具体可以参看这篇文章:
https://blog.csdn.net/jeffasd/article/details/84667071?spm=1001.2014.3001.5506
以上代码仅为示例,不一定能运行,新入坑菜鸟,有错欢迎指出。