Ik ben bezig met een eigen Run Time Type Information implementatie in C++ en heb een probleem met templates en de RTTI declaraties en implementaties. RTTI is geimplementeerd met de volgende klasse en macros die gebruikt worden om een klasse RTTI te geven.
Het probleem is nu echter dat als je een template hebt die RTTI gebruikt er geen RTTI wordt gegenereerd voor geinstancieerde types van de template. Ik wil niet voor iedere versie een typedef gebruiken om RTTI informatie aan een template te geven.
Weet iemand hier misschien een oplossing voor.
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
| class RTTI { public: RTTI(const char* name, const RTTI* baseClassType); ~RTTI() {} const char* GetName () const; bool IsExactly (const RTTI& rkType) const; bool IsDerived (const RTTI& rkType) const; protected: private: const char* m_typeName; const RTTI* m_baseType; }; #define DL_DECLARE_RTTI \ public:\ static const RTTI m_rttiInfo;\ virtual const RTTI& getType () const { return m_rttiInfo; } #define DL_IMPLEMENT_BASE_RTTI(CLASSTYPE)\ const RTTI CLASSTYPE::m_rttiInfo(#CLASSTYPE, 0); #define DL_IMPLEMENT_RTTI(CLASSTYPE, BASECLASSRTTI)\ const RTTI CLASSTYPE::m_rttiInfo(#CLASSTYPE, &BASECLASSRTTI::m_rttiInfo); #define DL_IMPLEMENT_BASE_TEMPLATE_RTTI(CLASSTYPE)\ template <class T> \ const RTTI CLASSTYPE<T>::m_rttiInfo(#CLASSTYPE, 0); #define DL_IMPLEMENT_TEMPLATE_RTTI(CLASSTYPE, BASECLASSRTTI)\ template <class T> \ const RTTI CLASSTYPE<T>::m_rttiInfo(#CLASSTYPE, &BASECLASSRTTI::m_rttiInfo); class Object { public: Object() {} virtual ~Object() {} virtual const String toString() const { return String(m_rttiInfo.GetName()); } DL_DECLARE_RTTI protected: }; |
Het probleem is nu echter dat als je een template hebt die RTTI gebruikt er geen RTTI wordt gegenereerd voor geinstancieerde types van de template. Ik wil niet voor iedere versie een typedef gebruiken om RTTI informatie aan een template te geven.
Weet iemand hier misschien een oplossing voor.
ex-FE Programmer: CMR:DiRT2,DiRT 3, DiRT Showdown, GRID 2, Mad Max