gpt4 book ai didi

c++ - 在结构中调用成员函数指针之一

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:27:18 25 4
gpt4 key购买 nike

我有以下结构

typedef struct      s_ins
{
std::string item;
int extended;
void (CPU::*fc)(std::list<std::string> &list>;
} t_ins;

然后我声明一个数组,其中我的 token 需要在函数中重定向

t_ins     g_ins[] =                                                                                       
{
{"push", 1, &CPU::ins_push},
{"pop", 0, &CPU::ins_pop},
{"dump", 0, &CPU::ins_dump},
{"assert", 1, &CPU::ins_assert},
{"add", 0, &CPU::ins_add},
{"sub", 0, &CPU::ins_sub},
{"mul", 0, &CPU::ins_mul},
{"div", 0, &CPU::ins_div},
{"mod", 0, &CPU::ins_mod},
{"print", 0, &CPU::ins_print},
{"exit", 0, &CPU::ins_exit},
{"", 0, 0}
};

最后我这样调用它(在 CPU 函数成员中):

(*g_ins[i].fc)(tokens);

我得到的是:

cpu.cpp: In member function ‘void CPU::get_instruction(std::list<std::basic_string<char> >&)’:
cpu.cpp:40:16: error: invalid use of unary ‘*’ on pointer to member

我尝试了很多其他方式来调用它,但我仍然有一些错误。这就是我的想法:我用 g_ins[i].fc 访问我的函数,告诉他这是一个带有 * 的函数成员指针,并传递我的参数。我在函数成员指针的同一类的函数中使用它,所以我不需要之前有一个对象,因为它是“this”对吗?

谢谢

最佳答案

成员函数需要一个对象才能被调用。通过指向成员函数的指针调用时,您需要指定该对象,即使您是从该类的另一个成员函数调用它时也是如此。你想要的是:

(this->*g_ins[i].fc)(tokens);

这里使用->*操作符在this上调用g_ins[i].fc表示的CPU成员函数。

或者,如果函数不依赖于任何对象状态,您可以将它们设为static 并使用普通函数指针。 fc 现在定义为:

void (*fc)(std::list<std::string> &list>);

你可以这样调用它:

g_ins[i].fc(tokens);

关于c++ - 在结构中调用成员函数指针之一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14987285/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com