从该类的实例调用 void(*vptr)() 指向的函数

Calling a function pointed to by void(*vptr)() from an instance of that class

提问人:crvenkapavica 提问时间:9/28/2023 最后编辑:Remy Lebeaucrvenkapavica 更新时间:9/28/2023 访问量:40

问:

这是以下领域的公共成员: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.hCSpellData

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++ 回调 void-pointers

评论

5赞 273K 9/28/2023
(_c_spell_data->*_vptr)();是这三者的有效语法,但答案是:你不能调用它,因为它不是指向 const 成员函数的指针。_vptr
0赞 Jarod42 9/28/2023
[OT]:可能会更有可读性。auto CSpellData::GetCallbackFromID(ESpellID spell_id) -> void (CSpellData::*) ()

答: 暂无答案