2013-10-06 37 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。 –