📄 typedecl_8h-source.html
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"><title>typedecl.h Source File</title><link href="doxygen.css" rel="stylesheet" type="text/css"></head><body><!-- Generated by Doxygen 1.2.15 --><center><a class="qindex" href="index.html">Main Page</a> <a class="qindex" href="hierarchy.html">Class Hierarchy</a> <a class="qindex" href="annotated.html">Compound List</a> <a class="qindex" href="files.html">File List</a> <a class="qindex" href="functions.html">Compound Members</a> </center><hr><h1>typedecl.h</h1><div class="fragment"><pre>00001 <font class="preprocessor">#ifndef __TYPEDECL_H__</font>00002 <font class="preprocessor"></font><font class="preprocessor">#define __TYPEDECL_H__</font>00003 <font class="preprocessor"></font>00004 <font class="preprocessor">#define RTTI_FIELD(x, flags) \</font>00005 <font class="preprocessor"> *new RTTIFieldDescriptor(#x, (char*)&x-(char*)this, sizeof(x), flags, RTTITypeOf(x))</font>00006 <font class="preprocessor"></font>00007 <font class="preprocessor">#define RTTI_ARRAY(x, flags) \</font>00008 <font class="preprocessor"> *new RTTIFieldDescriptor(#x, (char*)&x-(char*)this, sizeof(x), flags, \</font>00009 <font class="preprocessor"> new RTTIArrayType(RTTITypeOf(*x), sizeof(x)/sizeof(*x)))</font>00010 <font class="preprocessor"></font>00011 <font class="preprocessor">#define RTTI_PTR(x, flags) \</font>00012 <font class="preprocessor"> *new RTTIFieldDescriptor(#x, (char*)&x-(char*)this, sizeof(x), flags, \</font>00013 <font class="preprocessor"> RTTITypeOfPtr(&x))</font>00014 <font class="preprocessor"></font>00015 <font class="preprocessor">#define RTTI_PTR_TO_PTR(x, flags) \</font>00016 <font class="preprocessor"> *new RTTIFieldDescriptor(#x, (char*)&x-(char*)this, sizeof(x), flags, \</font>00017 <font class="preprocessor"> RTTITypeOfPtrToPtr(&x))</font>00018 <font class="preprocessor"></font>00019 <font class="preprocessor">#define RTTI_BASE_CLASS(BC, flags) \</font>00020 <font class="preprocessor"> *new RTTIFieldDescriptor(#BC, (char*)(BC*)this - (char*)this, sizeof(BC), flags, \</font>00021 <font class="preprocessor"> new RTTIDerivedType(&BC::RTTIDescriptor))</font>00022 <font class="preprocessor"></font>00023 00024 <font class="preprocessor">#define RTTI_NO_FIELDS (*(RTTIFieldDescriptor*)0)</font>00025 <font class="preprocessor"></font><font class="preprocessor">#define RTTI_NO_METHODS (*(RTTIMethodDescriptor*)0)</font>00026 <font class="preprocessor"></font>00027 <font class="preprocessor">#define RTTI_FUNC(x, flags) *new RTTIMethodDescriptor(#x, flags, RTTIFuncTypeOf(&self::x))</font>00028 <font class="preprocessor"></font>00029 <font class="preprocessor">#define RTTI_PROC(x, flags) *new RTTIMethodDescriptor(#x, flags, RTTIProcTypeOf(&self::x))</font>00030 <font class="preprocessor"></font>00031 00032 <font class="preprocessor">#define RTTI_DESCRIBE_STRUCT(components) \</font>00033 <font class="preprocessor"> static RTTIClassDescriptor RTTIDescriptor; \</font>00034 <font class="preprocessor"> static RTTIClassDescriptor* RTTIGetClass() { \</font>00035 <font class="preprocessor"> return &RTTIDescriptor; \</font>00036 <font class="preprocessor"> } \</font>00037 <font class="preprocessor"> RTTIFieldDescriptor* RTTIDescribeFields() { \</font>00038 <font class="preprocessor"> return &components; \</font>00039 <font class="preprocessor"> } \</font>00040 <font class="preprocessor"> RTTIMethodDescriptor* RTTIDescribeMethods() { \</font>00041 <font class="preprocessor"> return NULL; \</font>00042 <font class="preprocessor"> }</font>00043 <font class="preprocessor"></font>00044 <font class="preprocessor">#define RTTI_DESCRIBE_CLASS(T, fields, methods) \</font>00045 <font class="preprocessor"> static RTTIClassDescriptor RTTIDescriptor; \</font>00046 <font class="preprocessor"> static RTTIClassDescriptor* RTTIGetClass() { \</font>00047 <font class="preprocessor"> return &RTTIDescriptor; \</font>00048 <font class="preprocessor"> } \</font>00049 <font class="preprocessor"> RTTIFieldDescriptor* RTTIDescribeFields() { \</font>00050 <font class="preprocessor"> return &fields; \</font>00051 <font class="preprocessor"> } \</font>00052 <font class="preprocessor"> typedef T self; \</font>00053 <font class="preprocessor"> RTTIMethodDescriptor* RTTIDescribeMethods() { \</font>00054 <font class="preprocessor"> return &methods; \</font>00055 <font class="preprocessor"> } \</font>00056 <font class="preprocessor"> </font>00057 <font class="preprocessor"></font>00058 <font class="preprocessor">#define RTTI_REGISTER_STRUCT(T, flags) RTTI_REGISTER_CLASS(T, flags)</font>00059 <font class="preprocessor"></font>00060 <font class="preprocessor">#if defined(__GNUC__) && __GNUC_MINOR__ < 96</font>00061 <font class="preprocessor"></font><font class="preprocessor">#define RTTI_REGISTER_CLASS(T, flags) \</font>00062 <font class="preprocessor"> static RTTIFieldDescriptor* RTTIDescribeFieldsOf##T() { \</font>00063 <font class="preprocessor"> return T().RTTIDescribeFields(); \</font>00064 <font class="preprocessor"> } \</font>00065 <font class="preprocessor"> static RTTIMethodDescriptor* RTTIDescribeMethodsOf##T() { \</font>00066 <font class="preprocessor"> return T().RTTIDescribeMethods(); \</font>00067 <font class="preprocessor"> } \</font>00068 <font class="preprocessor"> static T* RTTIDefaultConstructorOf##T() { \</font>00069 <font class="preprocessor"> return new T(); \</font>00070 <font class="preprocessor"> } \</font>00071 <font class="preprocessor"> RTTIClassDescriptor T::RTTIDescriptor(#T, sizeof(T), &RTTIDescribeFieldsOf##T, \</font>00072 <font class="preprocessor"> &RTTIDescribeMethodsOf##T, \</font>00073 <font class="preprocessor"> (RTTIClassDescriptor::RTTICreateInstanceFunc)&RTTIDefaultConstructorOf##T, flags); \</font>00074 <font class="preprocessor"> RTTIClassDescriptor* RTTIGetClassDescriptor(T*) { \</font>00075 <font class="preprocessor"> return &T::RTTIDescriptor; \</font>00076 <font class="preprocessor"> }</font>00077 <font class="preprocessor"></font>00078 <font class="keyword">template</font><<font class="keyword">class</font> __T>00079 <font class="keyword">inline</font> <a class="code" href="classRTTIType.html">RTTIType</a>* RTTITypeOf(__T&) { 00080 <font class="keyword">extern</font> <a class="code" href="classRTTIClassDescriptor.html">RTTIClassDescriptor</a>* RTTIGetClassDescriptor(__T*);00081 <font class="keywordflow">return</font> RTTIGetClassDescriptor((__T*)0);00082 }00083 00084 <font class="preprocessor">#else</font>00085 <font class="preprocessor"></font>00086 <font class="preprocessor">#define RTTI_REGISTER_CLASS(T, flags) \</font>00087 <font class="preprocessor"> static RTTIFieldDescriptor* RTTIDescribeFieldsOf##T() { \</font>00088 <font class="preprocessor"> return T().RTTIDescribeFields(); \</font>00089 <font class="preprocessor"> } \</font>00090 <font class="preprocessor"> static RTTIMethodDescriptor* RTTIDescribeMethodsOf##T() { \</font>00091 <font class="preprocessor"> return T().RTTIDescribeMethods(); \</font>00092 <font class="preprocessor"> } \</font>00093 <font class="preprocessor"> static T* RTTIDefaultConstructorOf##T() { \</font>00094 <font class="preprocessor"> return new T(); \</font>00095 <font class="preprocessor"> } \</font>00096 <font class="preprocessor"> RTTIClassDescriptor T::RTTIDescriptor(#T, sizeof(T), &RTTIDescribeFieldsOf##T, \</font>00097 <font class="preprocessor"> &RTTIDescribeMethodsOf##T, \</font>00098 <font class="preprocessor"> (RTTIClassDescriptor::RTTICreateInstanceFunc)&RTTIDefaultConstructorOf##T, flags); \</font>00099 <font class="preprocessor"> template<> \</font>00100 <font class="preprocessor"> RTTIClassDescriptor* RTTIClassDescriptorHelper<T>::getClassDescriptor() { \</font>00101 <font class="preprocessor"> return &T::RTTIDescriptor; \</font>00102 <font class="preprocessor"> }</font>00103 <font class="preprocessor"></font>00104 <font class="keyword">template</font><<font class="keyword">class</font> __T>00105 <font class="keyword">class </font>RTTIClassDescriptorHelper { 00106 <font class="keyword">public</font>:00107 <font class="keyword">static</font> <a class="code" href="classRTTIClassDescriptor.html">RTTIClassDescriptor</a>* getClassDescriptor();00108 };00109 00110 <font class="keyword">template</font><<font class="keyword">class</font> __T>00111 <font class="keyword">inline</font> <a class="code" href="classRTTIType.html">RTTIType</a>* RTTITypeOf(__T&) { 00112 <font class="keywordflow">return</font> RTTIClassDescriptorHelper<__T>::getClassDescriptor();00113 }00114 <font class="preprocessor">#endif</font>00115 <font class="preprocessor"></font>00116 <font class="keyword">template</font><>00117 <font class="keyword">inline</font> <a class="code" href="classRTTIType.html">RTTIType</a>* RTTITypeOf(<font class="keywordtype">char</font>&) { 00118 <font class="keywordflow">return</font> &RTTIType::charType;00119 }00120 00121 <font class="keyword">template</font><>00122 <font class="keyword">inline</font> <a class="code" href="classRTTIType.html">RTTIType</a>* RTTITypeOf(<font class="keywordtype">unsigned</font> <font class="keywordtype">char</font>&) {00123 <font class="keywordflow">return</font> &RTTIType::ucharType;00124 }00125 00126 <font class="keyword">template</font><>00127 <font class="keyword">inline</font> <a class="code" href="classRTTIType.html">RTTIType</a>* RTTITypeOf(<font class="keywordtype">signed</font> <font class="keywordtype">char</font>&) {00128 <font class="keywordflow">return</font> &RTTIType::scharType;00129 }00130 00131 <font class="keyword">template</font><>00132 <font class="keyword">inline</font> <a class="code" href="classRTTIType.html">RTTIType</a>* RTTITypeOf(<font class="keywordtype">short</font>&) {00133 <font class="keywordflow">return</font> &RTTIType::shortType;00134 }00135 00136 <font class="keyword">template</font><>00137 <font class="keyword">inline</font> <a class="code" href="classRTTIType.html">RTTIType</a>* RTTITypeOf(<font class="keywordtype">unsigned</font> <font class="keywordtype">short</font>&) { 00138 <font class="keywordflow">return</font> &RTTIType::ushortType;00139 }00140 00141 <font class="keyword">template</font><>00142 <font class="keyword">inline</font> <a class="code" href="classRTTIType.html">RTTIType</a>* RTTITypeOf(<font class="keywordtype">int</font>&) {00143 <font class="keywordflow">return</font> &RTTIType::intType;00144 }00145 00146 <font class="keyword">template</font><>00147 <font class="keyword">inline</font> <a class="code" href="classRTTIType.html">RTTIType</a>* RTTITypeOf(<font class="keywordtype">unsigned</font> <font class="keywordtype">int</font>&) { 00148 <font class="keywordflow">return</font> &RTTIType::uintType;00149 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -