libcamera: base: signal: Support connecting signals to functors
It can be useful to connect a signal to a functor, and in particular a lambda function, while still operating in the context of a receiver object (to support both object-based disconnection and queued connections to Object instances). Add a BoundMethodFunctor class to bind a functor, and a corresponding Signal::connect() function. There is no corresponding disconnect() function, as a lambda passed to connect() can't be later passed to disconnect(). Disconnection typically uses disconnect(T *object), which will cover the vast majority of use cases. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Umang Jain <umang.jain@ideasonboard.com>
This commit is contained in:
@@ -121,6 +121,30 @@ SignalBase::SlotList SignalBase::slots()
|
||||
* \context This function is \threadsafe.
|
||||
*/
|
||||
|
||||
/**
|
||||
* \fn Signal::connect(T *object, Func func)
|
||||
* \brief Connect the signal to a function object slot
|
||||
* \param[in] object The slot object pointer
|
||||
* \param[in] func The function object
|
||||
*
|
||||
* If the typename T inherits from Object, the signal will be automatically
|
||||
* disconnected from the \a func slot of \a object when \a object is destroyed.
|
||||
* Otherwise the caller shall disconnect signals manually before destroying \a
|
||||
* object.
|
||||
*
|
||||
* The function object is typically a lambda function, but may be any object
|
||||
* that satisfies the FunctionObject named requirements. The types of the
|
||||
* function object arguments shall match the types of the signal arguments.
|
||||
*
|
||||
* No matching disconnect() function exist, as it wouldn't be possible to pass
|
||||
* to a disconnect() function the same lambda that was passed to connect(). The
|
||||
* connection created by this function can not be removed selectively if the
|
||||
* signal is connected to multiple slots of the same receiver, but may be
|
||||
* otherwise be removed using the disconnect(T *object) function.
|
||||
*
|
||||
* \context This function is \threadsafe.
|
||||
*/
|
||||
|
||||
/**
|
||||
* \fn Signal::connect(R (*func)(Args...))
|
||||
* \brief Connect the signal to a static function slot
|
||||
|
||||
Reference in New Issue
Block a user