Loading [MathJax]/extensions/tex2jax.js
The Gaudi Framework  master (d98a2936)
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
compose.h
Go to the documentation of this file.
1 /***********************************************************************************\
2 * (c) Copyright 1998-2025 CERN for the benefit of the LHCb and ATLAS collaborations *
3 * *
4 * This software is distributed under the terms of the Apache version 2 licence, *
5 * copied verbatim in the file "LICENSE". *
6 * *
7 * In applying this licence, CERN does not waive the privileges and immunities *
8 * granted to it by virtue of its status as an Intergovernmental Organization *
9 * or submit itself to any jurisdiction. *
10 \***********************************************************************************/
11 #pragma once
12 
13 #include <utility> // std::forward, std::move (objects)
14 
15 namespace Gaudi {
16 
17  namespace details {
18 
19  // C++17 version: https://godbolt.org/g/YdcvGg
20  template <typename... lambda_ts>
21  struct overloaded_t : lambda_ts... {
22  using lambda_ts::operator()...;
23  };
24  template <typename... lambda_ts>
25  overloaded_t( lambda_ts... ) -> overloaded_t<lambda_ts...>;
26 
27  } // namespace details
28 
29  //
30  // Create an object with an overloaded call operator by 'composing'/'joining'
31  // a set of callables (such as lambdas)
32  //
33  // see eg. the example at http://en.cppreference.com/w/cpp/utility/variant/visit
34  // for an example of why this is usefull
35  //
36  template <typename... lambda_ts>
37  auto overload( lambda_ts&&... lambdas ) {
38  return details::overloaded_t{ std::forward<lambda_ts>( lambdas )... };
39  }
40 } // namespace Gaudi
41 
42 // for backwards compatibility
43 // [[deprecated("please use Gaudi::overload instead of compose")]]
44 template <typename... lambda_ts>
45 auto compose( lambda_ts&&... lambdas ) {
46  return Gaudi::overload( std::forward<lambda_ts>( lambdas )... );
47 }
details
Definition: AnyDataWrapper.h:19
Gaudi
This file provides a Grammar for the type Gaudi::Accumulators::Axis It allows to use that type from p...
Definition: __init__.py:1
Gaudi::details::overloaded_t
Definition: compose.h:21
compose
auto compose(lambda_ts &&... lambdas)
Definition: compose.h:45
Gaudi::details::overloaded_t
overloaded_t(lambda_ts...) -> overloaded_t< lambda_ts... >
Gaudi::overload
auto overload(lambda_ts &&... lambdas)
Definition: compose.h:37