The Gaudi Framework  master (82fdf313)
Loading...
Searching...
No Matches
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
15namespace 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")]]
44template <typename... lambda_ts>
45auto compose( lambda_ts&&... lambdas ) {
46 return Gaudi::overload( std::forward<lambda_ts>( lambdas )... );
47}
auto compose(lambda_ts &&... lambdas)
Definition compose.h:45
overloaded_t(lambda_ts...) -> overloaded_t< lambda_ts... >
This file provides a Grammar for the type Gaudi::Accumulators::Axis It allows to use that type from p...
Definition __init__.py:1
auto overload(lambda_ts &&... lambdas)
Definition compose.h:37