Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-02-21 10:00:29

0001 /***********************************************************************************\
0002 * (c) Copyright 1998-2019 CERN for the benefit of the LHCb and ATLAS collaborations *
0003 *                                                                                   *
0004 * This software is distributed under the terms of the Apache version 2 licence,     *
0005 * copied verbatim in the file "LICENSE".                                            *
0006 *                                                                                   *
0007 * In applying this licence, CERN does not waive the privileges and immunities       *
0008 * granted to it by virtue of its status as an Intergovernmental Organization        *
0009 * or submit itself to any jurisdiction.                                             *
0010 \***********************************************************************************/
0011 #ifndef GAUDIKERNEL_EXTEND_INTERFACES_H
0012 #define GAUDIKERNEL_EXTEND_INTERFACES_H
0013 
0014 template <typename... Interfaces>
0015 struct extend_interfaces;
0016 
0017 #include "GaudiKernel/IInterface.h"
0018 
0019 // -----------------------------------------------------------------------------
0020 // Interface extension classes
0021 // -----------------------------------------------------------------------------
0022 /// Base class to be used to extend an interface.
0023 template <typename... Interfaces>
0024 struct GAUDI_API extend_interfaces : virtual public Interfaces... {
0025   /// take union of the ext_iids of all Interfaces...
0026   using ext_iids = typename Gaudi::interface_list_cat<typename Interfaces::ext_iids...>::type;
0027 };
0028 
0029 template <typename I1>
0030 using extend_interfaces1 = extend_interfaces<I1>;
0031 template <typename I1, typename I2>
0032 using extend_interfaces2 = extend_interfaces<I1, I2>;
0033 template <typename I1, typename I2, typename I3>
0034 using extend_interfaces3 = extend_interfaces<I1, I2, I3>;
0035 template <typename I1, typename I2, typename I3, typename I4>
0036 using extend_interfaces4 = extend_interfaces<I1, I2, I3, I4>;
0037 
0038 #endif