在struct中调用一个成员函数指针

时间:2013-02-20 18:28:44

标签: c++

我有以下结构

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'对吗?

由于

1 个答案:

答案 0 :(得分:9)

成员函数需要调用对象。通过指向成员函数的指针进行调用时,即使从该类的另一个成员函数调用该对象,也需要指定该对象。你想要的是:

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

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

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

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

你会这样称呼它:

g_ins[i].fc(tokens);