判断类中是否有指定名称的函数:
#include<utility>
#define HAS_MEMBER(member)
template<typename T,typename... Args>
struct has_member_##member
{
private:
template<typename U>
static auto Check(int)->decltype(std::declval<U>().member(std::declval<Args>()...), std::true_type());
template<typename U>
static std::false_type Check(...);
public:
enum{value=std::is_same<decltype(Check<T>(0)),std::true_type>::value };
};
HAS_MEMBER(before)
cout << has_member_before<AA>().value << endl;//是否有无参的before函数
cout << has_member_before<AA,int>().value << endl;//是否有参数是int的before函数
判断类成员函数返回值类型:
假设ContianerT为vector<int>或者const vecotr<int>
decltype(std::declval<ContainerT>().begin()) it_;