0

有没有一种简单的方法来推断成员函数的“类型”?我想推断以下(成员)函数的类型:

struct Sample {
  void func(int x) { ... }
};

void func(int x) { ... }

到以下类型(用于std::function):

void(int)

我正在寻找一个支持变量计数(不是可变参数!)的解决方案......

编辑 - 示例:

我正在寻找一个类似于decltype- 让我们称之为functiontype- 具有以下语义的表达式:

functiontype(Sample::func) <=> functiontype(::func) <=> void(int)

functiontype(expr)应评估为与 兼容的类型std::function

4

1 回答 1

3

这有帮助吗?

#include <type_traits>
#include <functional>

using namespace std;

struct A
{
    void f(double) { }
};

void f(double) { }

template<typename T>
struct function_type { };

template<typename T, typename R, typename... Args>
struct function_type<R (T::*)(Args...)>
{
    typedef function<R(Args...)> type;
};

template<typename R, typename... Args>
struct function_type<R(*)(Args...)>
{
    typedef function<R(Args...)> type;
};

int main()
{
    static_assert(
        is_same<
            function_type<decltype(&A::f)>::type, 
            function<void(double)>
            >::value,
        "Error"
        );

    static_assert(
        is_same<
            function_type<decltype(&f)>::type, 
            function<void(double)>
            >::value,
        "Error"
        );
}
于 2013-02-18T23:02:31.897 回答