2

我是函数指针的新手,我写了一个小程序,其中主类使用 Test 类来填充带有成员函数指针的列表。从我的主类中,我想调用 ExeFuns() 来调用每个成员函数,我不知道该怎么做。任何帮助是极大的赞赏。谢谢。

测试.h

Class Test{
  public : 
   void CallFun1(); 
   void CallFun2();

   void AddFuns(); 
   void ExeFuns();      
}; 

测试.cpp

std::vector<void (Test::*) ()> callist; 


void Test::AddFuns(){
  callist.push_back(&Test::CallFun1); 
  callist.push_back(&Test::CallFun2); 
}


void Test::ExeFuns(){
  for (int i = 0 ; i<eventlist.size(); i++)
  {
   callist[i](); // error!
  }
}

void Test::CallFun1(){ cout<<"Fun 1"<<endl; }
void Test::CallFun2(){ cout<<"Fun 2"<<endl; }

主文件

main()
{
Test obj; 
obj.AddFuns(); 
obj.ExeFuns(); 
}
4

2 回答 2

1

简而言之,您需要 .* 或 -> 运算符来调用成员方法。此外,您的代码中有几个编译错误和一个越界访问。这是正确的做法,

void Test::ExeFuns(){
  for (int i = 0 ; i<callist.size(); i++) // also there is out of bounds access (usage of <=) in your code
  {
    (this->*callist[i])(); // or (*this.*callist[i])();
  }
}
于 2013-10-04T05:42:29.260 回答
0

这些不是指向独立函数的指针,它们是指向类的成员函数的指针。正如克里斯所说,您需要一个对象来调用它们。

检查这个SO 问题。

于 2013-10-04T05:38:02.223 回答