EventAnalysis  1.3.0
Macros
FactoryMacros.h File Reference
#include "Factory.h"

Go to the source code of this file.

Macros

#define GETOVERRIDE(_ignored, _1, _2, _3, _4, _5, NAME, ...)   NAME
 
#define NAMEDARGS0()
 
#define NAMEDARGS1(type)   type arg1
 
#define NAMEDARGS2(type, ...)   type arg2, NAMEDARGS1(__VA_ARGS__)
 
#define NAMEDARGS3(type, ...)   type arg3, NAMEDARGS2(__VA_ARGS__)
 
#define NAMEDARGS4(type, ...)   type arg4, NAMEDARGS3(__VA_ARGS__)
 
#define NAMEDARGS5(type, ...)   type arg5, NAMEDARGS4(__VA_ARGS__)
 
#define NAMEDARGS(...)
 
#define ARGNAMES0()
 
#define ARGNAMES1(type)   arg1
 
#define ARGNAMES2(type, ...)   arg2, ARGNAMES1(__VA_ARGS__)
 
#define ARGNAMES3(type, ...)   arg3, ARGNAMES2(__VA_ARGS__)
 
#define ARGNAMES4(type, ...)   arg4, ARGNAMES3(__VA_ARGS__)
 
#define ARGNAMES5(type, ...)   arg5, ARGNAMES4(__VA_ARGS__)
 
#define ARGNAMES(...)   GETOVERRIDE(ignored, ##__VA_ARGS__, ARGNAMES5, ARGNAMES4, ARGNAMES3, ARGNAMES2, ARGNAMES1, ARGNAMES0)(__VA_ARGS__)
 
#define TYPENAMES0()   typename T0
 
#define TYPENAMES1(type)   typename T1, TYPENAMES0()
 
#define TYPENAMES2(type, ...)   typename T2, TYPENAMES1(__VA_ARGS__)
 
#define TYPENAMES3(type, ...)   typename T3, TYPENAMES2(__VA_ARGS__)
 
#define TYPENAMES4(type, ...)   typename T4, TYPENAMES3(__VA_ARGS__)
 
#define TYPENAMES5(type, ...)   typename T5, TYPENAMES4(__VA_ARGS__)
 
#define TYPENAMES(...)
 
#define RegisterClassAsImp(counter, baseClassName, className, aliasName, ...)
 Macro for registration of classes into a Factory. More...
 
#define RegisterClassAsHelper(counter, baseClassName, className, aliasName, ...)   RegisterClassAsImp(counter, baseClassName, className, aliasName, ##__VA_ARGS__)
 
#define RegisterClassAs(baseClassName, className, aliasName, ...)   RegisterClassAsHelper(__COUNTER__, baseClassName, className, aliasName, ##__VA_ARGS__)
 
#define RegisterClass(baseClassName, className, ...)   RegisterClassAsHelper(__COUNTER__, baseClassName, className, #className, ##__VA_ARGS__)
 Macro for registration of classes into a Factory using the class name as registration name. More...
 

Detailed Description

Utilities for automating the registration of a class in the corresponding factory.

Macro Definition Documentation

◆ ARGNAMES

#define ARGNAMES (   ...)    GETOVERRIDE(ignored, ##__VA_ARGS__, ARGNAMES5, ARGNAMES4, ARGNAMES3, ARGNAMES2, ARGNAMES1, ARGNAMES0)(__VA_ARGS__)

◆ ARGNAMES0

#define ARGNAMES0 ( )

◆ ARGNAMES1

#define ARGNAMES1 (   type)    arg1

◆ ARGNAMES2

#define ARGNAMES2 (   type,
  ... 
)    arg2, ARGNAMES1(__VA_ARGS__)

◆ ARGNAMES3

#define ARGNAMES3 (   type,
  ... 
)    arg3, ARGNAMES2(__VA_ARGS__)

◆ ARGNAMES4

#define ARGNAMES4 (   type,
  ... 
)    arg4, ARGNAMES3(__VA_ARGS__)

◆ ARGNAMES5

#define ARGNAMES5 (   type,
  ... 
)    arg5, ARGNAMES4(__VA_ARGS__)

◆ GETOVERRIDE

#define GETOVERRIDE (   _ignored,
  _1,
  _2,
  _3,
  _4,
  _5,
  NAME,
  ... 
)    NAME

◆ NAMEDARGS

#define NAMEDARGS (   ...)
Value:
(__VA_ARGS__)
#define GETOVERRIDE(_ignored, _1, _2, _3, _4, _5, NAME,...)
Definition: FactoryMacros.h:15
#define NAMEDARGS2(type,...)
Definition: FactoryMacros.h:21
#define NAMEDARGS3(type,...)
Definition: FactoryMacros.h:22
#define NAMEDARGS1(type)
Definition: FactoryMacros.h:20
#define NAMEDARGS0()
Definition: FactoryMacros.h:19
#define NAMEDARGS5(type,...)
Definition: FactoryMacros.h:24
#define NAMEDARGS4(type,...)
Definition: FactoryMacros.h:23

◆ NAMEDARGS0

#define NAMEDARGS0 ( )

◆ NAMEDARGS1

#define NAMEDARGS1 (   type)    type arg1

◆ NAMEDARGS2

#define NAMEDARGS2 (   type,
  ... 
)    type arg2, NAMEDARGS1(__VA_ARGS__)

◆ NAMEDARGS3

#define NAMEDARGS3 (   type,
  ... 
)    type arg3, NAMEDARGS2(__VA_ARGS__)

◆ NAMEDARGS4

#define NAMEDARGS4 (   type,
  ... 
)    type arg4, NAMEDARGS3(__VA_ARGS__)

◆ NAMEDARGS5

#define NAMEDARGS5 (   type,
  ... 
)    type arg5, NAMEDARGS4(__VA_ARGS__)

◆ RegisterClass

#define RegisterClass (   baseClassName,
  className,
  ... 
)    RegisterClassAsHelper(__COUNTER__, baseClassName, className, #className, ##__VA_ARGS__)

Macro for registration of classes into a Factory using the class name as registration name.

◆ RegisterClassAs

#define RegisterClassAs (   baseClassName,
  className,
  aliasName,
  ... 
)    RegisterClassAsHelper(__COUNTER__, baseClassName, className, aliasName, ##__VA_ARGS__)

◆ RegisterClassAsHelper

#define RegisterClassAsHelper (   counter,
  baseClassName,
  className,
  aliasName,
  ... 
)    RegisterClassAsImp(counter, baseClassName, className, aliasName, ##__VA_ARGS__)

◆ RegisterClassAsImp

#define RegisterClassAsImp (   counter,
  baseClassName,
  className,
  aliasName,
  ... 
)
Value:
baseClassName *className##Builder_##counter(NAMEDARGS(__VA_ARGS__)) { return new className(ARGNAMES(__VA_ARGS__)); } \
void className##Destroyer_##counter(className *p) { delete p; } \
class className##Proxy_##counter { \
public: \
className##Proxy_##counter() { \
className##Builder_##counter); \
} \
}; \
className##Proxy_##counter proxyFor##className##_##counter
bool RegisterBuilder(const std::string &builderName, T *(*objectBuilder)(ConstructorArgs...))
Register a builder for a class.
Definition: Factory.h:88
static Factory & GetInstance()
Getter method for singleton pointer.
Definition: Factory.h:75
#define ARGNAMES(...)
Definition: FactoryMacros.h:37
#define NAMEDARGS(...)
Definition: FactoryMacros.h:25

Macro for registration of classes into a Factory.

The macro needs the name of the class, of its base class (i.e. the class which is the template argument of Factory) and the registration name. The registration name is the one which must be used as argument for Factory<BaseClass>::CreateObject.

◆ TYPENAMES

#define TYPENAMES (   ...)
Value:
(__VA_ARGS__)
#define TYPENAMES0()
Definition: FactoryMacros.h:42
#define TYPENAMES1(type)
Definition: FactoryMacros.h:43
#define GETOVERRIDE(_ignored, _1, _2, _3, _4, _5, NAME,...)
Definition: FactoryMacros.h:15
#define TYPENAMES4(type,...)
Definition: FactoryMacros.h:46
#define TYPENAMES2(type,...)
Definition: FactoryMacros.h:44
#define TYPENAMES5(type,...)
Definition: FactoryMacros.h:47
#define TYPENAMES3(type,...)
Definition: FactoryMacros.h:45

◆ TYPENAMES0

#define TYPENAMES0 ( )    typename T0

◆ TYPENAMES1

#define TYPENAMES1 (   type)    typename T1, TYPENAMES0()

◆ TYPENAMES2

#define TYPENAMES2 (   type,
  ... 
)    typename T2, TYPENAMES1(__VA_ARGS__)

◆ TYPENAMES3

#define TYPENAMES3 (   type,
  ... 
)    typename T3, TYPENAMES2(__VA_ARGS__)

◆ TYPENAMES4

#define TYPENAMES4 (   type,
  ... 
)    typename T4, TYPENAMES3(__VA_ARGS__)

◆ TYPENAMES5

#define TYPENAMES5 (   type,
  ... 
)    typename T5, TYPENAMES4(__VA_ARGS__)