调用结构内部的成员函数指针之一

Call one of a member function pointer inside a struct

本文关键字:指针 函数 成员 结构 内部 调用      更新时间:2023-10-16

我有以下结构

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

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

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);