2015-10-13 127 views
1

我的问题是关于从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. 

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

+0

什么编译您使用其运行时检查这样的事情? – leemes

+0

你需要发布实际的代码,而不是“这样的事情”。 – molbdnilo

+0

建议:请记住,成员函数绑定到对象。 – 101010

回答

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

这仍然行不通,我做了c + +正常的方式,非常感谢您尝试 –

1

你不能让drawMyThing静态功能,如果你不需要实例化一个,然后像做:

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

+0

是的,我可以做到这一点,但我想保持动态, –

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 
} 
+0

我想我会这样做,因为我很害怕,其他方式不会工作。 我知道成员函数附加到执行的对象,但我想要一种动态绑定的方式,谢谢! –

+0

它工作正常,谢谢! –

相关问题