调用成员函数指针数组中的函数无执行效果的问题排查
成员函数指针数组调用无效果的原因
先看你给出的问题代码:
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
相关产品推荐
相关产品推荐

