我的问题是将成员函数从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 :(得分: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));