Question

I'm using boost::signals2 to create a class that uses a signal to run an event under a specific condition. This class has a method that is called: RegisterCallback.

This function should take a parameter of the slot type that the signal uses (which is of void return type with a double as the only arg).

However, I'm not quite sure how I should define that argument in the method signature, as the source file for the signal1 class is quite unreadable for me.

So I basically want to do this:

myTimer(interval);
myTimer.RegisterCallback(&aCallbackFunction);

Here is the member signal:

boost::signals2::signal<void (double)> m_signal;

... and here is the register method that I need (uncomplete)

   /**
    * Register a callback function that will be called when the timer interval elapses.
    */
    void RegisterCallback(const boost::signals2::signal1<???????> &slot)
    {
        m_signal.connect(slot);
    }
Was it helpful?

Solution

You can also use the boost::function and boost::bind library I think.

typedef booost::signals2::signal(void (double)>::slot_type CallbackSlot
void RegisterCallback(CallbackSlot slot)
{
    m_signal.connect(slot);
}

// ...

class MyClass {void handler(double);}

// ...

RegisterCallback(boost::bind(MyClass::handler, this, _1));

I propose that you also read the boost::function and boost::bind documentation to use signals2 in a good way. This example code is not tested but contains all the stuff needed to solve your problem.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top