给定一个名为myObj
的对象,其函数为doThis
和doThat
,将对象(以及指令到函数)传递给外部函数的最佳方法是什么?
作为我目前正在执行此操作的一个示例,我是一个外部函数void whatToDo( myClass myObj, string myFunction)
,我只需将doThis
或doThat
传递给myFunction
并检查它:
void whatToDo( myClass myObj, string myFunction) {
if( myFunction == "doThis") myObj.doThis();
if( myFunction == "doThat") myObj.doThat();
}
然而,随着课程的增长,这变得越来越糟糕。有没有办法将实际功能传递给whatToDo
,以便我可以直接调用它?
答案 0 :(得分:4)
这就是指向成员函数的指针:
void whatToDo(myClass& myObj, void (myClass::*p)())
{
// p is a pointer to a member function class myClass that
// takes no arguments and returns void
// you can invoke it thusly
(myObj.*p)();
}
您可以提供以下指示:
struct myClass {
void doThis();
void doThat();
};
myClass c;
whatToDo(c, &myClass::doThis); // will invoke c.doThis();
whatToDo(c, &myClass::doThat); // will invoke c.doThat();