如何在不使用类名称作为作用域的情况下获取类内成员函数的地址?

时间:2018-12-11 10:52:59

标签: c++ class member-function-pointers

我想知道是否可以在不使用范围的类名称的情况下获取类中成员函数的地址。

在下面的示例中,main内部是获取地址的常规方法,而func2内部有一种不使用类名的方法。要求这样的原因是,将来如果我更改类Name,则不必去内部进行更改。 例如:

Class A
{
 void func1()
 {
 }
 void func2()
 {
  /Address of func1/ = &func1; // something like this possible?
 }
}
void main()
{
 /Address of func1/ = &A::func1;
}

2 个答案:

答案 0 :(得分:7)

对于非{static成员函数,

&std::remove_reference_t<decltype(*this)>::func1

是一种方式。

对于static函数,请使用std::addressof

std::addressof(func1); 

这取决于A::是隐式的。

答案 1 :(得分:2)

如果func1static函数,则可以使用std::addressof获取其地址。

class A
{
    public:
    static void func1()
    {
    }
    void func2()
    {
        auto fptr = std::addressof(func1); 
    }
};

注意:这不适用于非static成员函数。