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

C++ 如何将一个成员函数传递给另一个成员函数?,c++,function,member,C++,Function,Member,我的问题是将成员函数从类a传递到类B的成员函数: 我试过这样的方法: typedef void (moteurGraphique::* f)(Sprite); f draw =&moteurGraphique::drawSprite; defaultScene.boucle(draw); moteurGraphique是一个类,moteurGraphique::drawSprite是一个成员函数 defaultScene是B类的实例,boucle是B成员函数 在函数的成员函数中调用的所

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

我试过这样的方法:

typedef void (moteurGraphique::* f)(Sprite);
f draw =&moteurGraphique::drawSprite;
defaultScene.boucle(draw);
moteurGraphique
是一个类,
moteurGraphique::drawSprite
是一个成员函数

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

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

void moteurGraphique::drawMyThings()
我尝试了不同的方法,那一种对我来说似乎更符合逻辑,但它不起作用! 我得到:


我想我做错了什么,有人能解释一下我的错误吗?

如果不需要实例化一个静态函数,你就不能将drawMyThing作为一个静态函数,然后执行如下操作:

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

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

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

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

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
}
class-Foo
{
公众:
void foo()
{

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

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
}
class-Foo
{
公众:
void foo()
{
std::coutC++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));
使用Function=std::Function;
void B::boucle(函数func);
...
A A;
B B;
b、 boucle(std::bind(&A::drawSprite,&A,std::占位符::_1));
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));
使用Function=std::Function;
void B::boucle(函数func);
...
A A;
B B;
b、 boucle(std::bind(&A::drawSprite,&A,std::占位符::_1));

您使用什么编译器在运行时检查这些东西?您需要发布实际的代码,而不是“像这样的东西”一个建议:记住成员函数绑定到对象。是的?是Visual C++,我知道在其他方面,比如静态函数,我可以这样做,但我想这样做,甚至可以吗?你使用什么编译器在运行时检查这些东西?你需要发布实际代码,而不是“类似的东西”。一个建议:记住,成员函数绑定到对象。是的,Visual C++,我知道我可以在其他的时候,像静态函数那样做,但是我想这样做,那是可能的吗?是的,我可以很容易地做到这一点,但是我想保持动态,是的,我可以很容易地做到这一点,但是我想保持动态,我想我会这样做。我会这样做,因为我害怕,其他方式不起作用。我知道成员函数被附加到执行对象,但我想要一种动态绑定的方式,谢谢!我想我会这样做,因为我害怕,其他方式不起作用。我知道成员函数被附加到执行对象,但我想要一种动态绑定bi的方式谢谢,那还不行,我做了C++正常的方式,谢谢你还没用,我做了C++的正常方式,谢谢大家的尝试。