这是我的代码的一部分:
在啊:
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),但是我得到编译错误"表达式不可分配".我该怎么做才能解决这个问题?
首先,为不同的事物选择不同的名称.
其次,非静态成员函数指针应声明为:
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)
| 归档时间: |
|
| 查看次数: |
12320 次 |
| 最近记录: |