1 #ifndef GAUDIKERNEL_COMPOSE_H 2 #define GAUDIKERNEL_COMPOSE_H 7 #if __cplusplus > 201402L 10 template <
typename... lambda_ts>
11 struct composer_t : lambda_ts... {
12 template <
typename... T>
13 composer_t( T&&... t ) : lambda_ts(
std::
forward<T>( t ) )...
17 using lambda_ts::operator()...;
22 template <
typename... lambda_ts>
25 template <
typename lambda_t>
27 composer_t(
const lambda_t& lambda ) : lambda_t{lambda} {}
30 using lambda_t::operator();
33 template <
typename lambda_t,
typename... more_lambda_ts>
37 template <
typename... lambda_ts>
38 composer_t(
const lambda_t& lambda, lambda_ts&&... more_lambdas )
39 : lambda_t{lambda},
super_t{std::forward<lambda_ts>( more_lambdas )...}
42 template <
typename... lambda_ts>
43 composer_t( lambda_t&& lambda, lambda_ts&&... more_lambdas )
44 : lambda_t{
std::move( lambda )},
super_t{std::forward<lambda_ts>( more_lambdas )...}
48 using lambda_t::operator();
49 using super_t::operator();
54 template <
typename... lambda_ts>
57 return {std::forward<lambda_ts>( lambdas )...};
composer_t(lambda_t &&lambda)
composer_t(lambda_t &&lambda, lambda_ts &&...more_lambdas)
details::composer_t< std::decay_t< lambda_ts >... > compose(lambda_ts &&...lambdas)
composer_t(const lambda_t &lambda)
composer_t(const lambda_t &lambda, lambda_ts &&...more_lambdas)