#define HAS_MEMBER(XXX) \
template<typename T, typename... Args>\
struct has_member_##XXX \
{ \
private: \
template<typename U> static auto Check(int) -> decltype(std::declval<U>().XXX(std::declval<Args>()...), std::true_type()); \
template<typename U> static std::false_type Check(...); \
public: \
static constexpr auto value = decltype(Check<T>(0))::value; \
}
使用:判断类A具有成员函数foo,并且函数具有一个int一个double参数.
HAS_MEMBER(foo);
class A {};
//class A
//{
//public:
// void foo(int, double) {}
//}
bool ret = has_member_foo<A, int, double>::value;
网友评论