Volume Cartographer 2.27.0
Classes | Public Types | Public Member Functions | Private Attributes | List of all members
volcart::Signal< Types > Class Template Reference

Basic signal class for implementing event callbacks. More...

#include <vc/core/util/Signals.hpp>

Inheritance diagram for volcart::Signal< Types >:
[legend]

Classes

struct  Connection
 

Public Types

using SlotFnType = std::function< void(Types...)>
 

Public Member Functions

void connect (SlotFnType slot)
 Connect to a free, static, or lambda function. More...
 
template<class Obj , class ObjMemberFn >
void connect (Obj *obj, ObjMemberFn &&fn)
 Connect to an object's member function. More...
 
template<class Obj , class Ret >
void connect (Obj *obj, Ret(Obj::*fn)())
 Connect a valued signal to a no-parameter object member function. More...
 
template<class Obj , class Ret >
void connect (const Obj *obj, Ret(Obj::*fn)() const)
 Connect a valued signal to a no-parameter object member function. More...
 
template<class Enabled = typename std::enable_if< std::is_empty<std::tuple<Types...>(Types...)>::value, bool>>
void connect (const std::function< void()> &slot)
 Connect signals with parameters to functions without parameters. More...
 
void disconnect ()
 Remove all connections. More...
 
std::size_t numConnections () const
 Get the number of connected slots. More...
 
void send (Types... args) const
 Signal all connections with parameters. More...
 
void operator() (Types... args) const
 Convenience operator: Calls Signal::send(args) More...
 

Private Attributes

std::vector< Connectionconnections_
 

Detailed Description

template<class... Types>
class volcart::Signal< Types >

Basic signal class for implementing event callbacks.

This class provides a statically-typed signals implementation similar to what you would find in Qt or Boost.signals2. Parameters passed to send() are immediately passed by value to connected functions. There is currently no lifetime management for connected objects, so this class is not thread-safe and should only be used to implement simple callbacks.

Example Usage:

void IntFn(int i) {
std::cout << i << std::endl;
}
Signal<int> signal;
signal.connect(IntFn);
signal.send(1); // prints "1"
Basic signal class for implementing event callbacks.
Definition: Signals.hpp:38
void send(Types... args) const
Signal all connections with parameters.
Definition: Signals.hpp:103
void connect(SlotFnType slot)
Connect to a free, static, or lambda function.
Definition: Signals.hpp:44
Template Parameters
TypesList of types to be emitted by the signal

Definition at line 37 of file Signals.hpp.

Member Typedef Documentation

◆ SlotFnType

template<class... Types>
using volcart::Signal< Types >::SlotFnType = std::function<void(Types...)>

Type of functions to which this signal can be connected

Definition at line 41 of file Signals.hpp.

Member Function Documentation

◆ connect() [1/5]

template<class... Types>
template<class Obj , class Ret >
void volcart::Signal< Types >::connect ( const Obj *  obj,
Ret(Obj::*)() const  fn 
)
inline

Connect a valued signal to a no-parameter object member function.

cv-qualified version.

Definition at line 78 of file Signals.hpp.

◆ connect() [2/5]

template<class... Types>
template<class Enabled = typename std::enable_if< std::is_empty<std::tuple<Types...>(Types...)>::value, bool>>
void volcart::Signal< Types >::connect ( const std::function< void()> &  slot)
inline

Connect signals with parameters to functions without parameters.

Definition at line 91 of file Signals.hpp.

◆ connect() [3/5]

template<class... Types>
template<class Obj , class ObjMemberFn >
void volcart::Signal< Types >::connect ( Obj *  obj,
ObjMemberFn &&  fn 
)
inline

Connect to an object's member function.

Parameters
objPointer to an object
fnReference to a member function of obj

Definition at line 56 of file Signals.hpp.

◆ connect() [4/5]

template<class... Types>
template<class Obj , class Ret >
void volcart::Signal< Types >::connect ( Obj *  obj,
Ret(Obj::*)()  fn 
)
inline

Connect a valued signal to a no-parameter object member function.

Definition at line 66 of file Signals.hpp.

◆ connect() [5/5]

template<class... Types>
void volcart::Signal< Types >::connect ( SlotFnType  slot)
inline

Connect to a free, static, or lambda function.

Definition at line 44 of file Signals.hpp.

◆ disconnect()

template<class... Types>
void volcart::Signal< Types >::disconnect ( )
inline

Remove all connections.

Definition at line 97 of file Signals.hpp.

◆ numConnections()

template<class... Types>
std::size_t volcart::Signal< Types >::numConnections ( ) const
inline

Get the number of connected slots.

Definition at line 100 of file Signals.hpp.

◆ operator()()

template<class... Types>
void volcart::Signal< Types >::operator() ( Types...  args) const
inline

Convenience operator: Calls Signal::send(args)

Definition at line 111 of file Signals.hpp.

◆ send()

template<class... Types>
void volcart::Signal< Types >::send ( Types...  args) const
inline

Signal all connections with parameters.

Definition at line 103 of file Signals.hpp.

Member Data Documentation

◆ connections_

template<class... Types>
std::vector<Connection> volcart::Signal< Types >::connections_
private

List of connections

Definition at line 120 of file Signals.hpp.


The documentation for this class was generated from the following file: