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

时间:2015-10-13 08:45:19

标签: c++ function member

我的问题是将成员函数从A类传递给B类的成员函数:

我试过这样的事情:

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

moteurGraphique是A类,moteurGraphique::drawSprite是成员函数,

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

在A:

的成员函数中调用的所有内容
void moteurGraphique::drawMyThings()

我尝试了不同的方法,这对我来说似乎更合乎逻辑,但它不会起作用! 我得到了:

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

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

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

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

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
}

答案 2 :(得分:1)

如果您不需要实例化A,然后执行以下操作,则无法将drawMyThing设为静态函数:

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