You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:09:33