有没有办法获取指向成员函数的指针的函数类型?

Is there a way to get the function type of a pointer to a member function?

如果你有一个指向成员函数的指针,就像这样:

struct Foo {  void func() {}  };

void(Foo::*funcPtr)() = &Foo::func;

有没有办法获取函数的类型,并删除 Foo::

void(Foo::*)() -> void(*)()

int(Foo::*)(int, double, float) -> int(*)(int, double, float)

你懂的。

目标是让 std::function 接受这样的仿函数:

struct Functor { void operator()(...){} }

Functor f;
std::function< magic_get_function_type< decltype(Functor::operator()) >::type > stdfunc{f};

可能吗?

要回答您的问题,可以使用一个简单的模板:

template <typename Return, typename Class, typename... Args>
Return(*GetSig(Return(Class::*)(Args...)))(Args...);

这定义了一个名为 GetSig 的函数,该函数将成员函数指针作为参数,并从本质上提取 Return 类型以及 Args... 和 returns 它作为非-成员函数指针。

用法示例:

class C;
int main() {
    using FuncType = int(C::*)(double, float);
    FuncType member_pointer;
    decltype(GetSigType(member_pointer)) new_pointer;
    // new_pointer is now of type int(*)(double, float) instead of
    // int(C::*)(double, float)
}