C++ 从向量列表调用成员函数指针

C++ 从向量列表调用成员函数指针,c++,C++,我是函数指针的新手,我编写了一个小程序,其中主类使用Test类用成员函数指针填充列表。在我的主类中,我想调用exefons()来调用每个成员函数,我不知道该怎么做。非常感谢您的帮助。谢谢 测试.h Class Test{ public : void CallFun1(); void CallFun2(); void AddFuns(); void ExeFuns(); }; 测试.cpp std::vector<void (Test::*

我是函数指针的新手,我编写了一个小程序,其中主类使用Test类用成员函数指针填充列表。在我的主类中,我想调用exefons()来调用每个成员函数,我不知道该怎么做。非常感谢您的帮助。谢谢

测试.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(); 
}

这些不是指向独立函数的指针,而是指向类的成员函数的指针。正如chris所说,你需要一个对象来调用他们


选中SO问题。

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

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])();
  }
}
void测试::exefons(){

对于(int i=0;i)您需要一个对象来调用它们。如果您有一个与C++11兼容的编译器(现在几乎都有),那么您可能需要查看和。如果您没有C++11,那么也可以这样做。哦,您的
exefons
循环中出现了一个off-by-one错误。谢谢您的评论。如果使用vector::pop_back()我将如何获得相同的结果?pop_back不返回任何值,因此您不能使用它来调用该方法,但您仍然可以使用vector::back()作为(this->*callist.back())();