Search code examples
c++functionpointersbind

Bind Memeber function to another member


I want a system where an object inside a class can call a function inside that class when assigned.

like this collider component example:

 class colliderComponent
{
  void Collide()
{
//call the assigned function 
}

}



 class object
{
public:
void collideDelegate()
{
 // do something
}

public:
  collidercomponent* cc;

 Object()
{
 cc-> //assign collide delegate to be called on Collide()
}
}

Solution

  • You can do this using std::function and std::bind. Here is an example (live demo):

    #include <functional>
    #include <iostream>
    
    class colliderComponent
    {
    public:
    void Collide()
    {
    collideDelegate(); 
    }
    std::function<void()> collideDelegate;
    };
    
    
    
    class Object
    {
    public:
    void collideDelegate()
    {
        std::cout << "collide delgate" << std::endl;
    }
    
    public:
      colliderComponent* cc;
    
    Object(colliderComponent* cc) : cc(cc)
    {
     cc->collideDelegate = std::bind(&Object::collideDelegate,this); //assign collide delegate to be called on Collide()
    }
    };
    
    int main()
    {
        colliderComponent cc;
        Object o(&cc);
        cc.Collide();
    }