std::enable_if
std::enable_if在c++中是个好工具,利用SFINAE对不同类型进行不同处理。
个人总结一下,std::enable_if有四种使用方式,分为返回值,参数,类型模板参数,非类型模板参数,对于后两种需要c++11以上的版本才支持。
举个例子,比如我需要输出一个数字,模板类型T需要为一个数字类型,我们来看看四种用法。
返回值
template<class T>
typename std::enable_if<std::is_integral<T>::value>::type
printIntegral(T t) {
std::cout << t;
}
enable_if在没有指定第二个模板参数时候enable_if::type默认为void,所以不需要有返回值。
参数
template<class T>
void printIntegral(T t,
typename std::enable_if<std::is_integral<T>::value>

本文介绍了std::enable_if在C++中的四种使用方式,包括返回值、参数、非类型模板参数和类型模板参数,以及如何利用它进行类型检查和条件编译,以实现根据不同类型进行不同操作。还演示了void_t在编译期检测类功能的方法。
最低0.47元/天 解锁文章
1728

被折叠的 条评论
为什么被折叠?



