如何将对象的方法传递给外部函数

时间:2016-04-30 20:50:13

标签: c++ object

给定一个名为myObj的对象,其函数为doThisdoThat,将对象(以及指令到函数)传递给外部函数的最佳方法是什么?

作为我目前正在执行此操作的一个示例,我是一个外部函数void whatToDo( myClass myObj, string myFunction),我只需将doThisdoThat传递给myFunction并检查它:

void whatToDo( myClass myObj, string myFunction) {
    if( myFunction == "doThis") myObj.doThis();
    if( myFunction == "doThat") myObj.doThat();
}

然而,随着课程的增长,这变得越来越糟糕。有没有办法将实际功能传递给whatToDo,以便我可以直接调用它?

1 个答案:

答案 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();