首页 > 解决方案 > 如何在不使用类名作为范围的情况下获取类中成员函数的地址?

问题描述

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

在下面的例子中,main里面是正常的获取地址的方法,但是在func2里面,有没有不使用类名的方法。要求这样的原因是,将来如果我更改班级名称,我不必去内部更改。例如:

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

标签: c++classmember-function-pointers

解决方案


对于非static成员函数,

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

是一种方式。

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

std::addressof(func1); 

A::这依赖于隐含的事实。


推荐阅读