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

来源:互联网 发布:什么测试网络掉包 编辑:程序博客网 时间:2024/04/30 17:04

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

#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_;
0 0
原创粉丝点击