提问人:crvenkapavica 提问时间:9/28/2023 最后编辑:Remy Lebeaucrvenkapavica 更新时间:9/28/2023 访问量:40
从该类的实例调用 void(*vptr)() 指向的函数
Calling a function pointed to by void(*vptr)() from an instance of that class
问:
这是以下领域的公共成员:CSpellData.h
void (CSpellData::* _vptr)();
它在构造函数中被分配了一个回调,如下所示:
_vptr = GetCallbackFromID(spell_id);
哪里:
void (CSpellData::* CSpellData::GetCallbackFromID(ESpellID spell_id))() {
switch (spell_id) {
case ESpellID::FIREBALL:
return &CSpellData::FireballCallback;
case ESpellID::STONESKIN:
return &CSpellData::StoneskinCallback;
default:
break;
}
}
现在,在我的 中,我有一个指向 的指针,如下所示:Spell.h
CSpellData
const CSpellData* _c_spell_data;
现在如何使用指针调用指向的函数?_vptr
_c_spell_data
ChatGPT帮了我一个多小时,它一直给我这样的回应:
//(c_spell_data.*c_spell_data._vptr)();
//(c_spell_data->*_vptr)();
//_c_spell_data->_vptr();
它们都会给出有关具有 0 个参数的函数的错误,依此类推。它编译的唯一方式是这样的:
_c_spell_data->vptr;
但随后回调实际上并没有触发。
请帮帮我!
我尝试了一切,从引用指针,到常量转换,再到询问 chatGPT。
答: 暂无答案
评论
(_c_spell_data->*_vptr)();
是这三者的有效语法,但答案是:你不能调用它,因为它不是指向 const 成员函数的指针。_vptr
auto CSpellData::GetCallbackFromID(ESpellID spell_id) -> void (CSpellData::*) ()