C++代码第6行含义技术问询:是函数定义还是仿函数?
关于这段C++代码第6行的解析
嘿,我来帮你把这段代码里的第6行掰扯明白~
首先看第6行的代码:
void (Person::*method)();
1. 这行的含义
这是在声明一个指向Person类非静态成员函数的指针变量,变量名叫method。
它的类型是void (Person::*)(),拆解一下:
Person::*表示这是属于Person类的成员指针void (...)表示这个指针指向的函数没有参数,返回值是void
简单说,这个变量可以用来存储Person类里任何符合“无参数、返回void”的成员函数的地址,比如后面定义的talk()或者listen()。
2. 它是函数还是仿函数?
都不是:
- 它不是函数定义:函数定义会包含具体的函数体(
{}里的执行逻辑),这只是一个指针变量的声明,仅用来存储函数地址。 - 它也不是仿函数:仿函数是指重载了
operator()的类/结构体,调用起来和普通函数一样;而这只是个成员函数指针,是用来间接调用成员函数的工具,和仿函数完全是不同的概念。
另外顺便提一下,你贴的代码里有几个小语法错误,比如:
- Command构造函数的参数写错了,应该是
void(Person::*m)() = 0,不是void(Person::*m() = 0) execute()里的调用少了个括号,正确写法是(object->*method)();
内容的提问来源于stack exchange,提问作者user15736
相关产品推荐
相关产品推荐

