Go to the documentation of this file.
21 #ifndef __virtualConstructor_hpp__
22 #define __virtualConstructor_hpp__
31 #define create_vCtor(baseClass, selectorName, argList, args) \
33 typedef std::function<uniquePtr<baseClass> argList> \
34 selectorName##FunctionType; \
35 typedef wordMap<selectorName##FunctionType> \
36 selectorName##vCtorSelectorType; \
38 inline static selectorName##vCtorSelectorType \
39 selectorName##vCtorSelector_; \
41 template<typename dType> \
42 class create##selectorName##Callback \
46 create##selectorName##Callback() \
48 auto success = selectorName##vCtorSelector_.insertIf( \
49 word(dType::TYPENAME()), \
50 [&] argList -> uniquePtr<baseClass> \
51 { return uniquePtr<baseClass>(new dType args); } \
56 fatalErrorInFunction \
57 << "Duplicate entry " << dType::TYPENAME() \
58 << " in virtual constructor table of " << #baseClass \
59 << " with selector name " << #selectorName << endl; \
63 create##selectorName##Callback(const create##selectorName##Callback&) = \
65 void operator=(const create##selectorName##Callback&) = delete; \
68 #define add_vCtor(baseClass, derivedClass, selectorName) \
70 inline static typename baseClass::template create##selectorName##Callback< \
72 baseClass##derivedClass##selectorName##_;
74 #endif // __virtualConstructor_hpp__