acme
Foundational cross-platform layer of the ca2 framework
Loading...
Searching...
No Matches
class.h
1#pragma once
2
3
4
5
6template < class T >
8{
9public:
10
11
12 template < class T2 >
13 inline static bool bases(T2 * p)
14 {
15 return dynamic_cast <T *> (p) != nullptr;
16 }
17
18 template < class T2 >
19 inline static bool bases(const ::pointer<T2>& p)
20 {
21 return dynamic_cast <T *> ((T2 *)p.m_p) != nullptr;
22 }
23
24};
25
26
27
28
29#define ASSERT_KINDOF(class_name, matter) ASSERT(base_class < class_name > ::bases(matter))
30#define DYNAMIC_DOWNCAST(class_name, matter) (dynamic_cast < class_name * > (matter))
31#define STATIC_DOWNCAST(class_name, matter) (dynamic_cast<class_name*>(matter))
32#define STATIC_DOWNCAST_T(class_name, T1, matter) (static_cast<class_name<T1>*>(::acme::StaticDownCast(RUNTIME_CLASS_T(class_name, T1), matter)))
33#define STATIC_DOWNCAST_T2(class_name, T1, T2, matter) (static_cast<class_name<T1, T2>*>(::acme::StaticDownCast(RUNTIME_CLASS_T2(class_name, T1, T2), matter)))
34
35
Definition class.h:8