libsigc++  2.4.1
Modules | Classes | Functions
Lambdas

libsigc++ ships with basic lambda functionality and the sigc::group adaptor, which uses lambdas to transform a functor's parameter list. More...

Modules

 group()
 sigc::group() alters an arbitrary functor by rebuilding its arguments from one or more lambda expressions.
 

Classes

struct  sigc::lambda< T_type >
 Lambda type. More...
 
struct  sigc::lambda_base
 A hint to the compiler. More...
 
struct  sigc::lambda_group1< T_functor, T_type1 >
 lambda_group1 wraps a functor and rebuilds its arguments from 1 lambda expressions. More...
 
struct  sigc::lambda_group2< T_functor, T_type1, T_type2 >
 lambda_group2 wraps a functor and rebuilds its arguments from 2 lambda expressions. More...
 
struct  sigc::lambda_group3< T_functor, T_type1, T_type2, T_type3 >
 lambda_group3 wraps a functor and rebuilds its arguments from 3 lambda expressions. More...
 
struct  sigc::unwrap_lambda_type< T_type >
 Deduces the type of the object stored in an object of the passed lambda type. More...
 
struct  sigc::unwrap_lambda_type< lambda< T_type > >
 Deduces the type of the object stored in an object of the passed lambda type. More...
 

Functions

template<class T_functor , class T_type1 >
lambda< lambda_group1< T_functor, typename unwrap_reference< T_type1 >::type > > sigc::group (const T_functor& _A_func, T_type1 _A_1)
 Alters an arbitrary functor by rebuilding its arguments from 1 lambda expressions. More...
 
template<class T_functor , class T_type1 , class T_type2 >
lambda< lambda_group2< T_functor, typename unwrap_reference< T_type1 >::type, typename unwrap_reference< T_type2 >::type > > sigc::group (const T_functor& _A_func, T_type1 _A_1, T_type2 _A_2)
 Alters an arbitrary functor by rebuilding its arguments from 2 lambda expressions. More...
 
template<class T_functor , class T_type1 , class T_type2 , class T_type3 >
lambda< lambda_group3< T_functor, typename unwrap_reference< T_type1 >::type, typename unwrap_reference< T_type2 >::type, typename unwrap_reference< T_type3 >::type > > sigc::group (const T_functor& _A_func, T_type1 _A_1, T_type2 _A_2, T_type3 _A_3)
 Alters an arbitrary functor by rebuilding its arguments from 3 lambda expressions. More...
 
template<class T_type >
T_type& sigc::unwrap_lambda_value (T_type& a)
 Gets the object stored inside a lambda object. More...
 
template<class T_type >
const T_type& sigc::unwrap_lambda_value (const T_type& a)
 Gets the object stored inside a lambda object. More...
 
template<class T_type >
const T_type& sigc::unwrap_lambda_value (const lambda< T_type >& a)
 Gets the object stored inside a lambda object. More...
 
template<class T_type >
lambda< T_type& > sigc::var (T_type& v)
 Converts a reference into a lambda object. More...
 
template<class T_type >
lambda< const T_type& > sigc::var (const T_type& v)
 Converts a constant reference into a lambda object. More...
 

Detailed Description

libsigc++ ships with basic lambda functionality and the sigc::group adaptor, which uses lambdas to transform a functor's parameter list.

The lambda selectors sigc::_1, sigc::_2, ..., sigc::_7 are used to select the first, second, ..., seventh argument from a list.

Examples:
std::cout << sigc::_1(10,20,30); // returns 10
std::cout << sigc::_2(10,20,30); // returns 20

Operators are defined so that, for example, lambda selectors can be used as placeholders in arithmetic expressions.

Examples:
std::cout << (sigc::_1 + 5)(3); // returns (3 + 5)
std::cout << (sigc::_1 * sigc::_2)(7,10); // returns (7 * 10)

If your compiler supports C++11 lambda expressions, they are often a good alternative to libsigc++'s lambda expressions. The following examples are equivalent to the previous ones.

[] (int x, int, int) -> int { return x; }(10,20,30); // returns 10
[] (int, int y, int) -> int { return y; }(10,20,30); // returns 20
[] (int x) -> int { return x + 5; }(3); // returns (3 + 5)
[] (int x, int y) -> int { return x * y; }(7,10); // returns (7 * 10)
Deprecated:
Use C++11 lambda expressions or std::bind() instead.

Function Documentation

template <class T_functor , class T_type1 >
lambda<lambda_group1<T_functor, typename unwrap_reference<T_type1>::type> > sigc::group ( const T_functor &  _A_func,
T_type1  _A_1 
)

Alters an arbitrary functor by rebuilding its arguments from 1 lambda expressions.

Deprecated:
Use C++11 lambda expressions or std::bind() instead.
template <class T_functor , class T_type1 , class T_type2 >
lambda<lambda_group2<T_functor, typename unwrap_reference<T_type1>::type, typename unwrap_reference<T_type2>::type> > sigc::group ( const T_functor &  _A_func,
T_type1  _A_1,
T_type2  _A_2 
)

Alters an arbitrary functor by rebuilding its arguments from 2 lambda expressions.

Deprecated:
Use C++11 lambda expressions or std::bind() instead.
template <class T_functor , class T_type1 , class T_type2 , class T_type3 >
lambda<lambda_group3<T_functor, typename unwrap_reference<T_type1>::type, typename unwrap_reference<T_type2>::type, typename unwrap_reference<T_type3>::type> > sigc::group ( const T_functor &  _A_func,
T_type1  _A_1,
T_type2  _A_2,
T_type3  _A_3 
)

Alters an arbitrary functor by rebuilding its arguments from 3 lambda expressions.

Deprecated:
Use C++11 lambda expressions or std::bind() instead.
template <class T_type >
T_type& sigc::unwrap_lambda_value ( T_type &  a)

Gets the object stored inside a lambda object.

Returns the object passed as argument, if it is not of type lambda.

Deprecated:
Use C++11 lambda expressions instead of libsigc++ lambdas.
template <class T_type >
const T_type& sigc::unwrap_lambda_value ( const T_type &  a)

Gets the object stored inside a lambda object.

Returns the object passed as argument, if it is not of type lambda.

Deprecated:
Use C++11 lambda expressions instead of libsigc++ lambdas.
template <class T_type >
const T_type& sigc::unwrap_lambda_value ( const lambda< T_type >&  a)

Gets the object stored inside a lambda object.

Deprecated:
Use C++11 lambda expressions instead of libsigc++ lambdas.
template <class T_type >
lambda<T_type&> sigc::var ( T_type &  v)

Converts a reference into a lambda object.

sigc::var creates a 0-ary functor, returning the value of a referenced variable.

Example:
int main(int argc, char* argv)
{
int data;
sigc::signal<int> readValue;
readValue.connect(sigc::var(data));
data = 3;
std::cout << readValue() << std::endl; //Prints 3.
data = 5;
std::cout << readValue() << std::endl; //Prints 5.
}

If your compiler supports C++11 lambda expressions, and you use the macro SIGC_FUNCTORS_DEDUCE_RESULT_TYPE_WITH_DECLTYPE, you can replace

readValue.connect(sigc::var(data));

in the example by

readValue.connect([&data] () -> int { return data; });
Deprecated:
Use C++11 lambda expressions instead of libsigc++ lambdas.
template <class T_type >
lambda<const T_type&> sigc::var ( const T_type &  v)

Converts a constant reference into a lambda object.

Deprecated:
Use C++11 lambda expressions instead of libsigc++ lambdas.