C++(11):基于SFINAE/enable_if检查类中是否有某个成员函数

  • Post author:
  • Post category:其他


有时需要检查某个类中是否有某种签名的成员函数,可以通过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 版权协议,转载请附上原文出处链接和本声明。