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

问题描述 投票:0回答:1

这是 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;

问题: 我现在如何使用 _c_spell_data 指针调用 _vptr 指向的函数?

ChatGPT 一个多小时都帮不了我,一直给我这样的回复:

//(c_spell_data.*c_spell_data._vptr)();
//(c_spell_data->*_vptr)();

//_c_spell_data->_vptr();

所有这些都会给出关于带有 0 个参数的函数的错误等等。它编译的唯一方法是这样的:

_c_spell_data->vptr;

但是回调实际上并没有触发。

请帮助我! 预先感谢

我尝试了一切,从引用指针,到 const 转换,再到询问 chatGPT。

c++ callback void-pointers
1个回答
0
投票

我解决了它,谢谢你指出了这个问题。现在我只是不在构造函数中使用 const 并且它可以工作。谢谢。

© www.soinside.com 2019 - 2024. All rights reserved.