libsigc++: sigc::signal< T_return(T_arg...)>::accumulated< T_accumulator > Class Template Reference

Like sigc::signal but the additional template parameter T_accumulator defines the accumulator type that should be used. More...

#include <sigc++/signal.h>

Inheritance diagram for sigc::signal< T_return(T_arg...)>::accumulated< T_accumulator >:

Public Member Functions

 accumulated ()=default
 
 accumulated (const accumulated& src)
 
- Public Member Functions inherited from sigc::signal_with_accumulator< T_return, T_accumulator, T_arg... >
 signal_with_accumulator ()=default
 
 signal_with_accumulator (const signal_with_accumulator& src)
 
 signal_with_accumulator (signal_with_accumulator&& src)
 
connection connect (const slot_type& slot_)
 Add a slot to the list of slots. More...

 
connection connect (slot_type&& slot_)
 Add a slot to the list of slots. More...

 
decltype(auto) emit (type_trait_take_t< T_arg >...a) const
 Triggers the emission of the signal. More...

 
decltype(auto) make_slot () const
 Creates a functor that calls emit() on this signal. More...

 
decltype(auto) operator() (type_trait_take_t< T_arg >...a) const
 Triggers the emission of the signal (see emit()). More...

 
signal_with_accumulatoroperator= (const signal_with_accumulator& src)
 
signal_with_accumulatoroperator= (signal_with_accumulator&& src)
 
- Public Member Functions inherited from sigc::signal_base
 signal_base () noexcept
 
 signal_base (const signal_base& src) noexcept
 
 signal_base (signal_base&& src)
 
 ~signal_base ()
 
void block (bool should_block=true) noexcept
 Sets the blocking state of all slots in the list. More...

 
bool blocked () const noexcept
 Returns whether all slots in the list are blocked. More...

 
void clear ()
 Empties the list of slots. More...

 
bool empty () const noexcept
 Returns whether the list of slots is empty. More...

 
signal_baseoperator= (const signal_base& src)
 
signal_baseoperator= (signal_base&& src)
 
size_type size () const noexcept
 Returns the number of slots in the list. More...

 
void unblock () noexcept
 Unsets the blocking state of all slots in the list. More...

 

Additional Inherited Members

- Public Types inherited from sigc::signal_with_accumulator< T_return, T_accumulator, T_arg... >
using slot_type = slot< T_return(T_arg...)>
 
- Public Types inherited from sigc::signal_base
using size_type = std::size_t
 
- Protected Types inherited from sigc::signal_base
using iterator_type = internal::signal_impl::iterator_type
 
- Protected Member Functions inherited from sigc::signal_base
iterator_type connect (const slot_base& slot_)
 Adds a slot at the end of the list of slots. More...

 
iterator_type connect (slot_base&& slot_)
 Adds a slot at the end of the list of slots. More...

 
std::shared_ptr< internal::signal_impl > impl () const
 Returns the signal_impl object encapsulating the list of slots. More...

 
iterator_type insert (iterator_type i, const slot_base& slot_)
 Adds a slot at the given position into the list of slots. More...

 
iterator_type insert (iterator_type i, slot_base&& slot_)
 Adds a slot at the given position into the list of slots. More...

 
- Protected Attributes inherited from sigc::signal_base
std::shared_ptr< internal::signal_impl > impl_
 The signal_impl object encapsulating the slot list. More...

 

Detailed Description

template<typename T_return, typename... T_arg>

template <typename T_accumulator>

class sigc::signal< T_return(T_arg...)>::accumulated< T_accumulator >

Like sigc::signal but the additional template parameter T_accumulator defines the accumulator type that should be used.

An accumulator is a functor that uses a pair of special iterators to step through a list of slots and calculate a return value from the results of the slot invocations. The iterators' operator*() executes the slot. The return value is buffered, so that in an expression like

a = (*i) * (*i);

the slot is executed only once.

Example 1:
This accumulator calculates the arithmetic mean value:
struct arithmetic_mean_accumulator
{
template<typename T_iterator>
double operator()(T_iterator first, T_iterator last) const
{
double value_ = 0;
int n_ = 0;
for (; first != last; ++first, ++n_)
value_ += *first;
return value_ / n_;
}
};
Example 2:
This accumulator stops signal emission when a slot returns zero:
struct interruptable_accumulator
{
template<typename T_iterator>
bool operator()(T_iterator first, T_iterator last) const
{
for (; first != last; ++first, ++n_)
if (!*first) return false;
return true;
}
};

Constructor & Destructor Documentation

template <typename T_return , typename... T_arg>
template <typename T_accumulator >
sigc::signal< T_return(T_arg...)>::accumulated< T_accumulator >::accumulated ( )
default
template <typename T_return , typename... T_arg>
template <typename T_accumulator >
sigc::signal< T_return(T_arg...)>::accumulated< T_accumulator >::accumulated ( const accumulated &  src)
inline