如何在类中获取方法的地址?

Rec*_*Hou 3 c++

这是我的代码的一部分:

在啊:

class classA
{
public:
void (*function_a)(void);
classA();
void function_a();
};
Run Code Online (Sandbox Code Playgroud)

在a.cpp中:

void classA::classA()
{
  (*function_a)() = function_a;
}

void classA::function_a()
{
  return;
}
Run Code Online (Sandbox Code Playgroud)

我想得到function_a的地址并将其保存到void(*function_a)(void),但是我得到编译错误"表达式不可分配".我该怎么做才能解决这个问题?

Naw*_*waz 8

首先,为不同的事物选择不同的名称.

其次,非静态成员函数指针应声明为:

void (classA::*memfun)(void); //note the syntax
Run Code Online (Sandbox Code Playgroud)

那么作业应该是:

memfun = &classA::function_a; //note &, and note the syntax on both sides.
Run Code Online (Sandbox Code Playgroud)

你称之为:

classA instance;
(instance.*memfun)();
Run Code Online (Sandbox Code Playgroud)

这就是你在C++ 03中所做的.

但是,在C++ 11中,您也可以使用std::function它.这是你如何做到的:

std::function<void(classA*)> memfun(&classA::function_a);
Run Code Online (Sandbox Code Playgroud)

你称之为:

classA instance;
memfun(&instance); 
Run Code Online (Sandbox Code Playgroud)

在线演示