The Gaudi Framework  v30r1 (5d4f4ae2)
compose.h
Go to the documentation of this file.
1 #ifndef GAUDIKERNEL_COMPOSE_H
2 #define GAUDIKERNEL_COMPOSE_H
3 
4 namespace details
5 {
6 
7 #if __cplusplus > 201402L
8 
9  // C++17 version: https://godbolt.org/g/2vAZQt
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 ) )...
14  {
15  }
16 
17  using lambda_ts::operator()...;
18  };
19 
20 #else
21 
22  template <typename... lambda_ts>
23  struct composer_t;
24 
25  template <typename lambda_t>
26  struct composer_t<lambda_t> : lambda_t {
27  composer_t( const lambda_t& lambda ) : lambda_t{lambda} {}
28  composer_t( lambda_t&& lambda ) : lambda_t{std::move( lambda )} {}
29 
30  using lambda_t::operator();
31  };
32 
33  template <typename lambda_t, typename... more_lambda_ts>
34  struct composer_t<lambda_t, more_lambda_ts...> : lambda_t, composer_t<more_lambda_ts...> {
35  using super_t = composer_t<more_lambda_ts...>;
36 
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 )...}
40  {
41  }
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 )...}
45  {
46  }
47 
48  using lambda_t::operator();
49  using super_t::operator();
50  };
51 #endif
52 }
53 
54 template <typename... lambda_ts>
56 {
57  return {std::forward<lambda_ts>( lambdas )...};
58 }
59 #endif
composer_t(lambda_t &&lambda)
Definition: compose.h:28
STL namespace.
T move(T...args)
composer_t(lambda_t &&lambda, lambda_ts &&...more_lambdas)
Definition: compose.h:43
details::composer_t< std::decay_t< lambda_ts >... > compose(lambda_ts &&...lambdas)
Definition: compose.h:55
T forward(T...args)
composer_t(const lambda_t &lambda)
Definition: compose.h:27
composer_t(const lambda_t &lambda, lambda_ts &&...more_lambdas)
Definition: compose.h:38