如何将一个成员函数传递给另一个成员函数?

How to pass a member function to another member function?

我的问题是关于将成员函数从 Class A 传递到 Class B 的成员函数:

我试过这样的事情:

typedef void (moteurGraphique::* f)(Sprite);
f draw =&moteurGraphique::drawSprite;
defaultScene.boucle(draw);

moteurGraphique是A,class,moteurGraphique::drawSprite是A的成员函数,

defaultScene是B的实例class,boucle是B的成员函数

A的成员函数中调用的所有:

void moteurGraphique::drawMyThings()

我尝试了不同的方法,我觉得那个更合乎逻辑,但它行不通! 我得到了:

Run-Time Check Failure #3 - The variable 'f' is being used without being initialized.

我觉得我做错了什么,有人可以解释我的错误吗?

如果不需要实例化 A,是否可以将 drawMyThing 设为静态函数,然后执行类似的操作:

defaultScene.boucle(A.drawMyThing(mySpriteThing));

?

成员函数需要在对象上调用,所以只传递函数指针是不够的,你还需要调用该指针的对象。您可以将该对象存储在将调用该函数的 class 中,在调用该函数之前创建它,或者将它与函数指针一起传递。

class Foo
{
public:
    void foo()
    {
        std::cout << "foo" << std::endl;
    } 
};

class Bar
{
public:
    void bar(Foo * obj, void(Foo::*func)(void))
    {
        (obj->*func)();
    }
};

int main()
{
    Foo f;
    Bar b;
    b.bar(&f, &Foo::foo);//output: foo
}

C++11 方式:

using Function = std::function<void (Sprite)>;

void B::boucle(Function func);
...

A a;
B b;

b.boucle(std::bind(&A::drawSprite, &a, std::placeholders::_1));