我想知道是否可以在不使用范围的类名称的情况下获取类中成员函数的地址。
在下面的示例中,main内部是获取地址的常规方法,而func2内部有一种不使用类名的方法。要求这样的原因是,将来如果我更改类Name,则不必去内部进行更改。 例如:
Class A
{
void func1()
{
}
void func2()
{
/Address of func1/ = &func1; // something like this possible?
}
}
void main()
{
/Address of func1/ = &A::func1;
}
答案 0 :(得分:7)
对于非{static
成员函数,
&std::remove_reference_t<decltype(*this)>::func1
是一种方式。
对于static
函数,请使用std::addressof
std::addressof(func1);
这取决于A::
是隐式的。
答案 1 :(得分:2)
如果func1
是static
函数,则可以使用std::addressof
获取其地址。
class A
{
public:
static void func1()
{
}
void func2()
{
auto fptr = std::addressof(func1);
}
};
注意:这不适用于非static
成员函数。