Also in meinem Eventsystem muss ich zb auch wissen ob eine Klassen abgeleitet ist, das falls sie abgeleitet ist, ich die Funktionen die auf die Baseklasse warten, auch aufrufen kann. Ich habe dafür aber noch Defines die in dem Fall, falls abgeleitet ist ein "typedef EventBaseClass" erstellen.
|
C-/C++-Quelltext
|
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
|
template<typename Class, typename BaseClass>
class HasEventBaseClassTemplateClass
{
public:
//! Gibt zurück ob es eine Basis-Klasse gibt, also von der abgeleitet wurde
static bool HasBaseClass()
{
// True, da es zwei veschiedene Template Parameter gibt
return true;
}
};
template<typename Class>
class HasEventBaseClassTemplateClass<Class, Class>
{
public:
//! Gibt zurück ob es eine Basis-Klasse gibt, also von der abgeleitet wurde
static bool HasBaseClass()
{
// False, da es es nur einen Template Parameter gibt und so der zweite auch gleich ist
return false;
}
};
//! Gibt zurück ob ein Event abgeleitet ist und so eine Basisklasse hat
template<typename Event>
bool HasEventBaseClass()
{
return HasEventBaseClassTemplateClass<Event, Event::EventBaseClass>::HasBaseClass();
}
|
Jetzt braucht man dann nur noch
|
C-/C++-Quelltext
|
1
|
if(HasEventBaseClass<Event>())
|
aufrufen und schon wird zur Compilezeit geprüft ob abgeleitet ist. Da ja entweder true/false rauskommt, dürfte das der Compiler auch gleich wegoptimieren und es bleiben nur die Instruktionen vom if.
Ich hoffe das hilft