首页 > 其他 > 详细

SFINAE

时间:2020-08-06 18:22:36      阅读:74      评论:0      收藏:0      [点我收藏+]

 

 

https://zh.cppreference.com/w/cpp/language/sfinae

 

技术分享图片

 

 

#include <iostream>
 
// 此重载始终在重载集中
// 省略号形参对于重载决议具有最低等级
void test(...)
{
    std::cout << "Catch-all overload called\n";
}
 
// 若 C 是类的引用类型且 F 是指向 C 的成员函数的指针
// 则这个重载被添加到重载集,
template <class C, class F>
auto test(C c, F f) -> decltype((void)(c.*f)(), void())
{
    std::cout << "Reference overload called\n";
}
 
// 若 C 是类的指针类型且 F 是指向 C 的成员函数的指针
// 则这个重载被添加到重载集,
template <class C, class F>
auto test(C c, F f) -> decltype((void)((c->*f)()), void())
{
    std::cout << "Pointer overload called\n";
}
 
struct X { void f() {} };
 
int main(){
  X x;
  test( x, &X::f);
  test(&x, &X::f);
  test(42, 1337);
}

 

 

SFINAE

原文:https://www.cnblogs.com/cx2016/p/13447745.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!