C++模板的一些巧妙功能

判断类中是否有指定名称的函数:

#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_;
原文地址:https://www.cnblogs.com/ggzone/p/5094530.html