C++中的SFINAE
Substitution Failure Is Not An Error
模板的特化(非必须)
1 | template<typename T> |
特化版本的目的是为了在模板实例化过程中,根据模板参数的类型提供不同的行为。
例如上例中当EnableIf
的模板参数T
是int
时,EnableIf<int>
结构体将包含一个type
成员,其类型为int
。
SFINAE的基本原理
**核心思想:**当编译器在模板实例化过程中尝试替换模板参数时,如果替换失败,编译器不会报错而是尝试其他可能的重载,只有当所有可能的重载全部都失败时,编译器才会报错。
1 |
|
上述代码运行foo<double>()
将会报错。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 四季音色!