有时需要检查某个类中是否有某种签名的成员函数,可以通过SFINAE的方式进行检查。
#include <iostream>
#include <string>
#include <type_traits>
using namespace std;
template<typename C>
struct HasMemberFunc
{
template <typename T,
typename U = typename decay<decltype(declval<T>().func(declval<int>()))>::type,
typename = typename enable_if<is_same<int, U>::value>::type>
static char test(int);
template <typename>
static int test(...);
static constexpr bool ifhasFunc = sizeof(test<C>(0)) == sizeof(char);
};
class A{
public:
int func(int){return 0;}
};
class B{
public:
int func(int, int = 0){return 0;}
};
class C{
public:
int func(int, int){return 0;}
};
class D{
public:
double func(int){return 0;}
};
int main()
{
cout<<HasMemberFunc<A>::ifhasFunc<<endl;
cout<<HasMemberFunc<B>::ifhasFunc<<endl;
cout<<HasMemberFunc&
版权声明:本文为jiemashizhen原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。