• check member function


    template<typename T>
    struct has_member_foo11
    {
    private:
        template<typename U> static auto check(int) -> decltype(std::declval<U>().foo(), 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 };
    };
    
    //more universal
    
    template<typename T, typename... Args>
    struct has_member_foo11
    {
    private:
        template<typename U> static auto check(int) -> decltype(std::declval<U>().foo(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 };
    };
    
    //Improve
    #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};
    };
    
    //test code
    HAS_MEMBER(foo)
    HAS_MEMBER(func)
    
    struct MyStruct
    {
        string foo() { return ""; }
        int func(int i) { return i; }
    };
    
    static_assert(has_member_foo<MyStruct>::value, "true");
    static_assert(has_member_func<MyStruct, int>::value, "true");
  • 相关阅读:
    Spring整合CXF之添加拦截器
    Spring整合CXF之发布WebService服务
    CXF添加自定义拦截器
    cxf处理一些Map等复杂类型
    webservice执行过程深入理解
    谈谈房车
    关于贷款消费
    记一次玩比特币的经历
    那年K城暑期工
    SpringBoot整合Xxl-Job
  • 原文地址:https://www.cnblogs.com/qicosmos/p/4929973.html
Copyright © 2020-2023  润新知