小工具知识网

当前位置: 首页 > 行业知识 > C++:SFINAE(替换失败不是错误)

行业知识

C++:SFINAE(替换失败不是错误)

2026-11-07 01:52:52 来源:互联网转载

“���换失败不是错误” (Substitution Failure Is Not An Error)

()

在函数模板的重载决议中会应用此规则:当模板形参在替换成显式指定的类型或推导出的类型失败时,从重载集中丢弃这个特化,而非导致编译失败。

函数模板重载过程

()
  • 在模板实参推导前,使用显示指定的模板实参对形参进行替换
    template void fun(T){}template void fun(T){}fun(5);//进行中显示部分的替换,T换为int,int换为6
    • 在模板实参推导后,使用推导出的实参和从默认项获得的实参对形参进行替换
      template void fun(T){}template void fun(T){}fun(5);//推导T为int,默认值6替换int
      • 选择合适的版本,没有合适的版本编译失败
        template void fun(int) { std::cout  std::cout using type = T;};template};template std::cout std::cout std::cout};//判读有无指定类型的成员变量xtemplate};//判读有无指定类型的成员类型xtemplate};struct A { double x; };struct B { using x = int; };int main() {std::cout

上一篇:qq怎么不定位服务器?

下一篇:2023android auto车机安装使用教程(华为荣耀emui8/emui9安装android auto教程)