如何将一个成员函数传递给另一个成员函数?
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));
我的问题是关于将成员函数从 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));