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

调用成员函数指针数组中的函数无执行效果的问题排查

成员函数指针数组调用无效果的原因

先看你给出的问题代码:

void (CClient::*pMethod[CNetwork::ClientEvent::E_CE_MAX_EVENTS])();

pMethod[CNetwork::ClientEvent::E_CE_ACCEPTED] = &CClient::Accepted;
pMethod[CNetwork::ClientEvent::E_CE_ACCOUNT_INFO] = &CClient::AccountInfo;

// This code does nothing
CClient::pMethod[m_network->m_type];

这段代码没执行预期功能,核心有两个问题:

1. 仅访问函数指针,未触发调用

CClient::pMethod[m_network->m_type];这行代码只是从数组中取出了对应的成员函数指针,但没有执行调用操作。要触发函数执行,必须在指针后加上(),但这还不够——因为是成员函数指针,还需要依赖类实例。

2. 非静态成员函数必须通过类实例调用

非静态成员函数内部隐含this指针,用来指向当前类的实例,所以必须通过某个CClient对象来调用。你的代码完全没指定要操作哪个CClient实例,自然无法执行函数逻辑。

修正后的示例代码

假设你有一个CClient的实例client,正确的调用方式如下:

// 方式一:分步调用
void (CClient::*targetFunc)() = CClient::pMethod[m_network->m_type];
(client.*targetFunc)();

// 方式二:直接调用
(client.*CClient::pMethod[m_network->m_type])();

额外注意:要确保m_network->m_type的取值在0到E_CE_MAX_EVENTS-1之间,避免数组越界访问导致未定义行为。

内容的提问来源于stack exchange,提问作者developer68

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 22:39:52