小编cda*_*ara的帖子

使用variadics测试成员函数是否存在

所以我非常熟悉测试成员函数是否存在的范例.目前此代码有效:

#include <iostream>
#include <type_traits>

struct has_mem_func_foo_impl {
    template <typename U, U>
    struct chk { };

    template <typename Class, typename Arg>
    static std::true_type has_foo(chk<void(Class::*)(Arg), &Class::foo>*);

    template <typename, typename>
    static std::false_type has_foo(...);
};

template <typename Class, typename Arg>
struct has_mem_func_foo : decltype(has_mem_func_foo_impl::template has_foo<Class,Arg>(nullptr)) { };


struct bar {
    void foo(int) { }
};

int main() {
    static_assert( has_mem_func_foo<bar, int>::value, "bar has foo(int)" );
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,如果我稍作调整:

#include <iostream>
#include <type_traits>

struct has_mem_func_foo_impl {
    template <typename U, U>
    struct chk { };

    template …
Run Code Online (Sandbox Code Playgroud)

c++ metaprogramming variadic-templates c++11 c++14

14
推荐指数
1
解决办法
280
查看次数

标签 统计

c++ ×1

c++11 ×1

c++14 ×1

metaprogramming ×1

variadic-templates ×1