文章目录
1、什么是SFINAE
从这一节开始,我们才算真正踏入模板元编程的大门,前面介绍的模板编程都是为模板元编程铺路。
我们首先来了解模板元编程的一个基本规则:SFINAE,它是Substitution Failure Is Not An Error的缩写,直接翻译就是替换失败不是一个错误。
这条规则应用于函数模板重载决议时,如果模板参数展开(用户显示指定或者自动推导得到)失败,编译器并不会报错,而是从重载函数集中丢弃,也就是说会继续寻找下一个匹配函数。
这是一个使得C++模板推导规则符合程序员想象的规则。通过SFINAE,我们能够使得模板匹配更为“精确”,即 使得一些模板函数、模板类在实例化时使用特殊的模板版本,而另外一些则使用通用的版本,这样就大大增加了模板设计使用上的灵活性。
来看一个最基本的例子:
template <typename T