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 > selectorName##FunctionType; \
34 typedef wordMap<selectorName##FunctionType> selectorName##vCtorSelectorType; \
36 inline static selectorName##vCtorSelectorType selectorName##vCtorSelector_; \
39 template<typename dType> \
40 class create##selectorName##Callback \
43 create##selectorName##Callback () \
46 selectorName##vCtorSelector_.insertIf \
48 word(dType::TYPENAME()), \
49 [&] argList -> uniquePtr<baseClass> \
51 return uniquePtr<baseClass> \
60 fatalErrorInFunction \
61 << "Duplicate entry "<< dType::TYPENAME() \
62 << " in virtual constructor table of "<< #baseClass \
63 << " with selector name " << #selectorName <<endl; \
68 create##selectorName##Callback \
69 (const create##selectorName##Callback&)= delete; \
71 (const create##selectorName##Callback&)= delete; \
76 #define add_vCtor(baseClass, derivedClass, selectorName) \
78 inline static baseClass::create##selectorName##Callback<derivedClass> baseClass##derivedClass##selectorName##_;
82 #endif // __virtualConstructor_hpp__