有没有办法获取指向成员函数的指针的函数类型?
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)
}
如果你有一个指向成员函数的指针,就像这样:
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)
}