diff --git a/Control/AthOnnx/AthOnnxComps/AthOnnxComps/OnnxRuntimeSvc.h b/Control/AthOnnx/AthOnnxComps/AthOnnxComps/OnnxRuntimeSvc.h index d99b3aa91e38d1143958d36db2b0dfa69a51eedd..1f2165467186b23503dd9a047dc8ebf7a27442d4 100644 --- a/Control/AthOnnx/AthOnnxComps/AthOnnxComps/OnnxRuntimeSvc.h +++ b/Control/AthOnnx/AthOnnxComps/AthOnnxComps/OnnxRuntimeSvc.h @@ -24,7 +24,7 @@ namespace AthOnnx { /// /// @author Attila Krasznahorkay <Attila.Krasznahorkay@cern.ch> /// - class OnnxRuntimeSvc : public asg::AsgService, virtual public IOnnxRuntimeSvc { + class OnnxRuntimeSvc : public extends<asg::AsgService, IOnnxRuntimeSvc> { public: diff --git a/Control/AthOnnx/AthOnnxComps/src/OnnxRuntimeSvc.cxx b/Control/AthOnnx/AthOnnxComps/src/OnnxRuntimeSvc.cxx index 602c69647271f217c0e45fed2731dee7f61f6348..6c0fcb2dea609de44bc2e3fb24f0b428a1e6767a 100644 --- a/Control/AthOnnx/AthOnnxComps/src/OnnxRuntimeSvc.cxx +++ b/Control/AthOnnx/AthOnnxComps/src/OnnxRuntimeSvc.cxx @@ -6,10 +6,10 @@ namespace AthOnnx { OnnxRuntimeSvc::OnnxRuntimeSvc(const std::string& name, ISvcLocator* svc) : - asg::AsgService(name, svc) + base_class(name, svc) { - declareServiceInterface<AthOnnx::IOnnxRuntimeSvc>(); } + StatusCode OnnxRuntimeSvc::initialize() { // Create the environment object. diff --git a/Control/AthToolSupport/AsgExampleTools/AsgExampleTools/UnitTestService1.h b/Control/AthToolSupport/AsgExampleTools/AsgExampleTools/UnitTestService1.h index f02c1b80b1db0c7b1370b5cfeae5961c58591bb3..54987f72a871179dffe9accff65b6dfb93808d05 100644 --- a/Control/AthToolSupport/AsgExampleTools/AsgExampleTools/UnitTestService1.h +++ b/Control/AthToolSupport/AsgExampleTools/AsgExampleTools/UnitTestService1.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration */ /// @author Nils Krumnack @@ -22,8 +22,7 @@ namespace asg /// This allows to unit test the various capabilities of /// AnaToolHandle in a controlled fashion. - struct UnitTestService1 : virtual public IUnitTestService1, - public AsgService + struct UnitTestService1 : extends<AsgService, IUnitTestService1> { /// \brief standard constructor public: diff --git a/Control/AthToolSupport/AsgExampleTools/Root/UnitTestService1.cxx b/Control/AthToolSupport/AsgExampleTools/Root/UnitTestService1.cxx index d54453caca35eb0a5cc047b1dce9702075f2a201..ee5b2d18a2a30f84023761666da85ecbeae3bf28 100644 --- a/Control/AthToolSupport/AsgExampleTools/Root/UnitTestService1.cxx +++ b/Control/AthToolSupport/AsgExampleTools/Root/UnitTestService1.cxx @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration */ /// @author Nils Krumnack @@ -27,10 +27,8 @@ namespace asg { UnitTestService1 :: UnitTestService1 (const std::string& name, ISvcLocator* pSvcLocator) - : AsgService (name, pSvcLocator) + : base_class (name, pSvcLocator) { - declareServiceInterface<IUnitTestService1>(); - declareProperty ("propertyInt", m_propertyInt, "the integer property"); declareProperty ("propertyString", m_propertyString, "the string property"); declareProperty ("initializeFail", m_initializeFail, "whether initialize should fail"); diff --git a/Control/AthToolSupport/AsgServices/AsgServices/AsgService.h b/Control/AthToolSupport/AsgServices/AsgServices/AsgService.h index 66e2a07363acf2c07f590a044d7875e9171abf8d..9612ba095723836dd5a6fdb0a9810991af1834a3 100644 --- a/Control/AthToolSupport/AsgServices/AsgServices/AsgService.h +++ b/Control/AthToolSupport/AsgServices/AsgServices/AsgService.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration */ /// @author Nils Krumnack @@ -38,14 +38,13 @@ namespace asg /// /// Loosely based on the \ref AsgTool implementation. - class AsgService : public virtual IAsgService, - public AsgServiceBase + class AsgService : + public extends<AsgServiceBase, IAsgService> { public: AsgService (const std::string& name, ISvcLocator* pSvcLocator); - /// set up/tear down functions /// \{ virtual StatusCode initialize (); @@ -55,31 +54,8 @@ namespace asg /// Print the state of the service virtual void print() const; - /// add the given interface to the list of interfaces - template<typename T> void declareServiceInterface (); - - -#ifndef XAOD_STANDALONE - /// query interface for gaudi - virtual StatusCode queryInterface (const InterfaceID& riid, void **ppvi); - - /// list of interfaces we have - private: - std::vector<std::pair<const InterfaceID& (*)(),void *(*)(AsgService*)>> m_interfaces; -#endif - }; // class AsgService - - - template<typename T> - void AsgService :: declareServiceInterface () - { -#ifndef XAOD_STANDALONE - m_interfaces.emplace_back (T::interfaceID, [] (AsgService *self) -> void* {return dynamic_cast<T*>(self);}); -#endif - } - } // namespace asg #endif // ASGSERVICES_ASGSERVICE_H diff --git a/Control/AthToolSupport/AsgServices/AsgServices/IAsgService.h b/Control/AthToolSupport/AsgServices/AsgServices/IAsgService.h index ec2fbde00fbca233460c330e24f485bc7ecad432..d40ef2035494a0a46c050532209a67e88914af53 100644 --- a/Control/AthToolSupport/AsgServices/AsgServices/IAsgService.h +++ b/Control/AthToolSupport/AsgServices/AsgServices/IAsgService.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration */ /// @author Nils Krumnack @@ -13,16 +13,7 @@ // Local include(s): #include "AsgMessaging/INamedInterface.h" - -#ifdef XAOD_STANDALONE -/// \brief standalone version of the Gaudi interface declaration -/// -/// This can't be a no-op, because the Gaudi version needs to be -/// followed by a semicolon, so we need a statement that requires to -/// be followed by a semi-colon. -#define DeclareInterfaceID(iface, major, minor) \ - static constexpr std::nullptr_t interfaceID = nullptr -#endif +#include "AsgTools/Interfaces.h" namespace asg { diff --git a/Control/AthToolSupport/AsgServices/Root/AsgService.cxx b/Control/AthToolSupport/AsgServices/Root/AsgService.cxx index 7fc83db9cb34a9e34a7e4dc9d4aa6ddbbea6d8b1..178f1720c67b8b7e28991abad64dbf819c4d0ad0 100644 --- a/Control/AthToolSupport/AsgServices/Root/AsgService.cxx +++ b/Control/AthToolSupport/AsgServices/Root/AsgService.cxx @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration */ /// @author Nils Krumnack @@ -18,15 +18,13 @@ namespace asg AsgService :: AsgService( const std::string& name, ISvcLocator* pSvcLocator ) - : AsgServiceBase( #ifndef XAOD_STANDALONE - name, pSvcLocator -#else // not XAOD_STANDALONE - name -#endif // not XAOD_STANDALONE - ) + : base_class(name, pSvcLocator) +#else + : base_class(name) +#endif { - (void) pSvcLocator; + (void) pSvcLocator; // suppress compiler warning in XAOD_STANDALONE } StatusCode AsgService :: @@ -51,23 +49,4 @@ namespace asg return; } - - -#ifndef XAOD_STANDALONE - StatusCode AsgService :: - queryInterface (const InterfaceID& riid, void **ppvi) - { - for (const auto& interface : m_interfaces) - { - if (riid == interface.first()) - { - *ppvi = interface.second (this); - addRef(); - return StatusCode::SUCCESS; - } - } - return AsgServiceBase::queryInterface (riid, ppvi); - } -#endif - } // namespace asg diff --git a/Control/AthToolSupport/AsgTools/AsgTools/AsgComponent.h b/Control/AthToolSupport/AsgTools/AsgTools/AsgComponent.h index dc7cdcdf4e579db0dc397e30453a166f76354317..58cbfbaf08869f7ea1c343f6fb9f24fefd81ba9d 100644 --- a/Control/AthToolSupport/AsgTools/AsgTools/AsgComponent.h +++ b/Control/AthToolSupport/AsgTools/AsgTools/AsgComponent.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration */ /// \author Nils Krumnack @@ -15,6 +15,7 @@ #include <AsgMessaging/INamedInterface.h> #include <AsgMessaging/MessageCheck.h> #include <AsgMessaging/MsgLevel.h> +#include <AsgTools/Interfaces.h> #include <memory> #include <vector> diff --git a/Control/AthToolSupport/AsgTools/AsgTools/Interfaces.h b/Control/AthToolSupport/AsgTools/AsgTools/Interfaces.h new file mode 100644 index 0000000000000000000000000000000000000000..82a3f170c75cfa3d510d29b0d97791ca7ca04e38 --- /dev/null +++ b/Control/AthToolSupport/AsgTools/AsgTools/Interfaces.h @@ -0,0 +1,40 @@ +/* + Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration +*/ +#ifndef ASGTOOLS_INTERFACES_H +#define ASGTOOLS_INTERFACES_H + +/// +/// Standalone versions of Gaudi interface declarations. +// +#if defined(XAOD_STANDALONE) + +/// This can't be a no-op, because the Gaudi version needs to be +/// followed by a semicolon, so we need a statement that requires to +/// be followed by a semi-colon. +#define DeclareInterfaceID(iface, major, minor) \ + static_assert(true) + + +/// See GaudiKernel/extend_interfaces.h +template <typename... Interfaces> +struct extend_interfaces : virtual public Interfaces... { +}; + + +/// See GaudiKernel/extends.h +template <typename BASE, typename... Interfaces> +struct extends : public BASE, virtual public extend_interfaces<Interfaces...> { + using base_class = extends; + using BASE::BASE; +}; + + +/// See GaudiKernel/implements.h +template <typename... Interfaces> +struct implements : virtual public extend_interfaces<Interfaces...> { + using base_class = implements<Interfaces...>; +}; + +#endif +#endif diff --git a/InnerDetector/InDetValidation/InDetTrackPerfMon/src/PlotsDefinitionSvc.cxx b/InnerDetector/InDetValidation/InDetTrackPerfMon/src/PlotsDefinitionSvc.cxx index d7b4929dff3c6f63b8bfabce931edac0e0ae332a..e4b5bb91cd7dd10c6712ece0e3c3f817565a4731 100644 --- a/InnerDetector/InDetValidation/InDetTrackPerfMon/src/PlotsDefinitionSvc.cxx +++ b/InnerDetector/InDetValidation/InDetTrackPerfMon/src/PlotsDefinitionSvc.cxx @@ -17,10 +17,9 @@ /// ------------------- PlotsDefinitionSvc::PlotsDefinitionSvc( const std::string& name, ISvcLocator* pSvcLocator ) : - AsgService( name, pSvcLocator ), + base_class( name, pSvcLocator ), m_plotsDefMap{}, m_nullDef() { - declareServiceInterface< IPlotsDefinitionSvc >(); } diff --git a/InnerDetector/InDetValidation/InDetTrackPerfMon/src/PlotsDefinitionSvc.h b/InnerDetector/InDetValidation/InDetTrackPerfMon/src/PlotsDefinitionSvc.h index df71e4f07b3c958333c467e827024bbff68c53c5..b28e3884aaa1ce06f8a6fce39a449a3fd81a9a59 100644 --- a/InnerDetector/InDetValidation/InDetTrackPerfMon/src/PlotsDefinitionSvc.h +++ b/InnerDetector/InDetValidation/InDetTrackPerfMon/src/PlotsDefinitionSvc.h @@ -27,8 +27,7 @@ class PlotsDefinitionSvc : - public asg::AsgService, - virtual public IPlotsDefinitionSvc { + public extends<asg::AsgService, IPlotsDefinitionSvc> { public: diff --git a/InnerDetector/InDetValidation/InDetTrackPerfMon/src/TrackAnalysisDefinitionSvc.cxx b/InnerDetector/InDetValidation/InDetTrackPerfMon/src/TrackAnalysisDefinitionSvc.cxx index ff39fb4dd5820410934f9cd13306747fb60d2951..ba9e67d98e263effa95b034b4f7163de991f5a01 100644 --- a/InnerDetector/InDetValidation/InDetTrackPerfMon/src/TrackAnalysisDefinitionSvc.cxx +++ b/InnerDetector/InDetValidation/InDetTrackPerfMon/src/TrackAnalysisDefinitionSvc.cxx @@ -19,19 +19,6 @@ /// Athena includes #include "InDetPhysValMonitoring/ResolutionHelper.h" -/// ------------------- -/// --- Constructor --- -/// ------------------- -TrackAnalysisDefinitionSvc::TrackAnalysisDefinitionSvc( const std::string& name, ISvcLocator* pSvcLocator ) : - AsgService( name, pSvcLocator ) -{ - declareServiceInterface< ITrackAnalysisDefinitionSvc >(); -} - -/// ------------------ -/// --- Destructor --- -/// ------------------ -TrackAnalysisDefinitionSvc::~TrackAnalysisDefinitionSvc() = default; /// ------------------ /// --- initialize --- diff --git a/InnerDetector/InDetValidation/InDetTrackPerfMon/src/TrackAnalysisDefinitionSvc.h b/InnerDetector/InDetValidation/InDetTrackPerfMon/src/TrackAnalysisDefinitionSvc.h index 6c53c25f853b3de47b2ab54ce3fa124efdc40969..8bf7920bc80c40ffedbfa65a062a0b7aa1b79318 100644 --- a/InnerDetector/InDetValidation/InDetTrackPerfMon/src/TrackAnalysisDefinitionSvc.h +++ b/InnerDetector/InDetValidation/InDetTrackPerfMon/src/TrackAnalysisDefinitionSvc.h @@ -24,14 +24,11 @@ #include <vector> class TrackAnalysisDefinitionSvc final : - public asg::AsgService, - virtual public ITrackAnalysisDefinitionSvc { + public extends<asg::AsgService, ITrackAnalysisDefinitionSvc> { public: - - TrackAnalysisDefinitionSvc( const std::string& name, ISvcLocator* pSvcLocator ); - - virtual ~TrackAnalysisDefinitionSvc(); + using extends::extends; // base class constructor + virtual ~TrackAnalysisDefinitionSvc() = default; virtual StatusCode initialize() override final; diff --git a/PhysicsAnalysis/Algorithms/SelectionHelpers/Root/SelectionNameSvc.cxx b/PhysicsAnalysis/Algorithms/SelectionHelpers/Root/SelectionNameSvc.cxx index 580a8828e3befe4ff50b1862b9ba75c9bebbe875..c5410efede88ac1b5de9fc437cceaa6a903a63ea 100644 --- a/PhysicsAnalysis/Algorithms/SelectionHelpers/Root/SelectionNameSvc.cxx +++ b/PhysicsAnalysis/Algorithms/SelectionHelpers/Root/SelectionNameSvc.cxx @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration */ /// @author Nils Krumnack @@ -24,16 +24,6 @@ namespace CP { - SelectionNameSvc :: - SelectionNameSvc (const std::string& name, - ISvcLocator* pSvcLocator) - : AsgService (name, pSvcLocator) - { - - declareServiceInterface<ISelectionNameSvc>(); - } - - StatusCode SelectionNameSvc :: initialize () diff --git a/PhysicsAnalysis/Algorithms/SelectionHelpers/SelectionHelpers/SelectionNameSvc.h b/PhysicsAnalysis/Algorithms/SelectionHelpers/SelectionHelpers/SelectionNameSvc.h index 7d6bd2573d0fa524902b00d10d8af6ba4a5d38aa..640066226e10f8ee4057de391ec16509300c6292 100644 --- a/PhysicsAnalysis/Algorithms/SelectionHelpers/SelectionHelpers/SelectionNameSvc.h +++ b/PhysicsAnalysis/Algorithms/SelectionHelpers/SelectionHelpers/SelectionNameSvc.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration */ /// @author Nils Krumnack @@ -22,29 +22,15 @@ namespace CP { /// \brief the canonical implementation of \ref ISelectionNameSvc - class SelectionNameSvc final : public asg::AsgService, - virtual public ISelectionNameSvc + class SelectionNameSvc final : public extends<asg::AsgService, ISelectionNameSvc> { - // - // public interface - // - - /// \brief standard constructor - /// \par Guarantee - /// strong - /// \par Failures - /// out of memory II - public: - SelectionNameSvc (const std::string& name, - ISvcLocator* pSvcLocator); - - // - // inherited interface + // public interface // public: + using extends::extends; // base class constructor virtual StatusCode initialize () override; virtual StatusCode addAcceptInfo (const std::string& objectName, const std::string& decorName, diff --git a/PhysicsAnalysis/Algorithms/SystematicsHandles/Root/SystematicsSvc.cxx b/PhysicsAnalysis/Algorithms/SystematicsHandles/Root/SystematicsSvc.cxx index 33fd0150972b97685b30c809e8326874833d8135..8f53be838613ec308107643130e3547631f708d0 100644 --- a/PhysicsAnalysis/Algorithms/SystematicsHandles/Root/SystematicsSvc.cxx +++ b/PhysicsAnalysis/Algorithms/SystematicsHandles/Root/SystematicsSvc.cxx @@ -25,15 +25,6 @@ namespace CP { - SystematicsSvc :: - SystematicsSvc (const std::string& name, - ISvcLocator* pSvcLocator) - : AsgService (name, pSvcLocator) - { - declareServiceInterface<ISystematicsSvc>(); - } - - StatusCode SystematicsSvc :: initialize () diff --git a/PhysicsAnalysis/Algorithms/SystematicsHandles/SystematicsHandles/SystematicsSvc.h b/PhysicsAnalysis/Algorithms/SystematicsHandles/SystematicsHandles/SystematicsSvc.h index 5ee3dc7f45dd2e531f9ef872758835625b96096c..7674be9934df9f4b3f0aacf4aa2e2acf113c8257 100644 --- a/PhysicsAnalysis/Algorithms/SystematicsHandles/SystematicsHandles/SystematicsSvc.h +++ b/PhysicsAnalysis/Algorithms/SystematicsHandles/SystematicsHandles/SystematicsSvc.h @@ -20,29 +20,16 @@ namespace CP { /// \brief the canonical implementation of \ref ISystematicsSvc - class SystematicsSvc final : public asg::AsgService, - virtual public ISystematicsSvc + class SystematicsSvc final : public extends<asg::AsgService, ISystematicsSvc> { + // // public interface // - /// \brief standard constructor - /// \par Guarantee - /// strong - /// \par Failures - /// out of memory II public: - SystematicsSvc (const std::string& name, - ISvcLocator* pSvcLocator); - + using extends::extends; // base class constructor - - // - // inherited interface - // - - public: virtual StatusCode initialize () override; virtual StatusCode finalize () override; virtual std::vector<CP::SystematicSet> diff --git a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/NNSharingSvc.h b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/NNSharingSvc.h index 53abfcfb7fa2c992deaa9074ba238ff3f21dbcec..4674a526c388cb6fec925670ab08c8388ca1fd73 100644 --- a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/NNSharingSvc.h +++ b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/NNSharingSvc.h @@ -28,10 +28,11 @@ namespace FlavorTagDiscriminants }; } - class NNSharingSvc: public asg::AsgService, public INNSharingSvc + class NNSharingSvc: public extends<asg::AsgService, INNSharingSvc> { public: - NNSharingSvc(const std::string& name, ISvcLocator* svc); + using extends::extends; // base class constructor + virtual std::shared_ptr<const GNN> get( const std::string& nn_name, const GNNOptions& opts) override; diff --git a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/NNSharingSvc.cxx b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/NNSharingSvc.cxx index 729df76306c5014799bf559e049bbdfde85e616e..20901aade8576837a0e023c74372542c424979f5 100644 --- a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/NNSharingSvc.cxx +++ b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/NNSharingSvc.cxx @@ -19,11 +19,6 @@ namespace FlavorTagDiscriminants { } } - NNSharingSvc::NNSharingSvc(const std::string& name, ISvcLocator* svc): - AsgService(name, svc) - { - declareServiceInterface<INNSharingSvc>(); - } std::shared_ptr<const GNN> NNSharingSvc::get( const std::string& nn_name, const GNNOptions& opts) { diff --git a/Reconstruction/egamma/egammaMVACalib/Root/egammaMVASvc.cxx b/Reconstruction/egamma/egammaMVACalib/Root/egammaMVASvc.cxx index 8759af553e9f044532deac0d0c8740b2589ac0b4..88c9c35c6461d1d285e5e17ebc1f26a8015fbab1 100644 --- a/Reconstruction/egamma/egammaMVACalib/Root/egammaMVASvc.cxx +++ b/Reconstruction/egamma/egammaMVACalib/Root/egammaMVASvc.cxx @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration */ #include "egammaMVACalib/egammaMVASvc.h" @@ -11,12 +11,6 @@ #include "xAODEgamma/EgammaxAODHelpers.h" -egammaMVASvc::egammaMVASvc(const std::string& name, ISvcLocator* svc) : - asg::AsgService( name, svc ) -{ - declareServiceInterface<IegammaMVASvc>(); -} - StatusCode egammaMVASvc::initialize() { ATH_MSG_DEBUG("In initialize of " << name() << "..." ); diff --git a/Reconstruction/egamma/egammaMVACalib/egammaMVACalib/egammaMVASvc.h b/Reconstruction/egamma/egammaMVACalib/egammaMVACalib/egammaMVASvc.h index 323fd516bd670e357c828c21bfdb4aef48b118f1..cfd4ec6cb58d12d11fddde55f365fefc96196a5a 100644 --- a/Reconstruction/egamma/egammaMVACalib/egammaMVACalib/egammaMVASvc.h +++ b/Reconstruction/egamma/egammaMVACalib/egammaMVACalib/egammaMVASvc.h @@ -1,7 +1,7 @@ // Dear Emacs, this is -*- C++ -*- /* - Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration */ #ifndef EGAMMAMVACALIB_EGAMMAMVASVC_H @@ -16,10 +16,11 @@ #include <string> -class egammaMVASvc : public asg::AsgService, virtual public IegammaMVASvc +class egammaMVASvc : public extends<asg::AsgService, IegammaMVASvc> { public: - egammaMVASvc( const std::string& name, ISvcLocator* svc ); + using extends::extends; // base class constructor + virtual ~egammaMVASvc() override {}; virtual StatusCode initialize() override;