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

How to pass an object's method to an external function

本文关键字:外部 函数 方法 对象      更新时间:2023-10-16

给定一个名为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,这样我就可以直接调用它了?

这就是指向成员函数的指针的作用:

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