μHAL (v2.8.17)
Part of the IPbus software repository
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
DerivedNode.hpp
Go to the documentation of this file.
1/*
2---------------------------------------------------------------------------
3
4 This file is part of uHAL.
5
6 uHAL is a hardware access library and programming framework
7 originally developed for upgrades of the Level-1 trigger of the CMS
8 experiment at CERN.
9
10 uHAL is free software: you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation, either version 3 of the License, or
13 (at your option) any later version.
14
15 uHAL is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
19
20 You should have received a copy of the GNU General Public License
21 along with uHAL. If not, see <http://www.gnu.org/licenses/>.
22
23
24 Andrew Rose, Imperial College, London
25 email: awr01 <AT> imperial.ac.uk
26
27 Marc Magrans de Abril, CERN
28 email: marc.magrans.de.abril <AT> cern.ch
29
30---------------------------------------------------------------------------
31*/
32
39#ifndef _uhal_DerivedNode_hpp_
40#define _uhal_DerivedNode_hpp_
41
42
43#include <type_traits>
44
45#include "uhal/Node.hpp"
46
47
53#define UHAL_REGISTER_DERIVED_NODE( classname ) \
54 uhal::RegistrationHelper< classname > classname##RegistrationHelper( #classname ); \
55 uhal::Node* classname::clone() const \
56 { \
57 static_assert((std::is_base_of<uhal::Node, classname>::value), "Derived node class must be a descendant of uhal::Node"); \
58 return new classname ( static_cast<const classname&> ( *this ) ); \
59 }
60
61
63#define UHAL_DERIVEDNODE(DerivedType) \
64protected: \
65 virtual uhal::Node* clone() const;
66
67
68namespace uhal
69{
70
78 template< typename T >
80 {
85 RegistrationHelper ( const std::string& aDerivedClassName );
86 };
87
88}
89
91
92#endif
Experimental!! Helper struct for adding the DerivedNode to the Node Factory Declaring an instance of ...
Definition: DerivedNode.hpp:80