2013-10-06 110 views
0
struct object 
{ 
    void function() 
    { 
     std::cout << "function" << std::endl; 
    } 
}; 

int main() 
{ 
    // create vectors for objects and functions) 
    std::vector<object*> objectvec; 
    std::vector<void*> functionlist; 
    objectvec.push_back(new object); 

    // create a pointer to an object's function 

    void (object::* ptfptr_function) (void) = &object::function; 
    functionlist.push_back(&ptfptr_tryfunc); 

    // how do I call "functionvec[0]->tryfunc()" using the functionlist? 
    // (following line does nothing:) 

    functionlist[0]; 
} 

回答

2

你想这样的:

std::vector<void(object::*)()> functionlist; // container 

functionlist.push_back(&object::function);  // add pointer-to-member-fn 

(objectvec[0]->*functionlist[0])();    // invoke ptmf on an instance 
+0

这是非常有帮助,谢谢。 – user2852086

+0

这非常有帮助,谢谢。我猜想它可以放置在如下循环上: for(int i = 0; i <= NUM​​; i ++) {objectvec [i] - > * functionlist [i])(); } 但是,它可以简单地作为指向特定成员函数的指针,而不需要复合函数“(objectvec [i] - > * functionlist [i])()”。 在一次调用中 functionlist [i](); – user2852086

+0

@ user2852086:否。成员函数不是函数。你不能*调用*成员函数。你只能将它与一个对象结合起来调用它*。把它看作是“你班上的抵消”。如果要将特定对象绑定到成员函数,请使用'std :: mem_fn'或'std :: bind'或lambda。 –