导航

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

Posted on 2015-09-13 21:25  ggzone  阅读(130)  评论(0编辑  收藏  举报

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

#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_;