⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 typedecl_8h-source.html

📁 java 反射机制详解示例,实现类属性及方法修改
💻 HTML
📖 第 1 页 / 共 4 页
字号:
<!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> &nbsp; <a class="qindex" href="hierarchy.html">Class Hierarchy</a> &nbsp; <a class="qindex" href="annotated.html">Compound List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; </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*)&amp;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*)&amp;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*)&amp;x-(char*)this, sizeof(x), flags, \</font>00013 <font class="preprocessor">                            RTTITypeOfPtr(&amp;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*)&amp;x-(char*)this, sizeof(x), flags, \</font>00017 <font class="preprocessor">                            RTTITypeOfPtrToPtr(&amp;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(&amp;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(&amp;self::x))</font>00028 <font class="preprocessor"></font>00029 <font class="preprocessor">#define RTTI_PROC(x, flags) *new RTTIMethodDescriptor(#x, flags, RTTIProcTypeOf(&amp;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 &amp;RTTIDescriptor; \</font>00036 <font class="preprocessor">    } \</font>00037 <font class="preprocessor">    RTTIFieldDescriptor* RTTIDescribeFields() { \</font>00038 <font class="preprocessor">        return &amp;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 &amp;RTTIDescriptor; \</font>00048 <font class="preprocessor">    } \</font>00049 <font class="preprocessor">    RTTIFieldDescriptor* RTTIDescribeFields() { \</font>00050 <font class="preprocessor">        return &amp;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 &amp;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__) &amp;&amp; __GNUC_MINOR__ &lt; 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), &amp;RTTIDescribeFieldsOf##T, \</font>00072 <font class="preprocessor">                                          &amp;RTTIDescribeMethodsOf##T, \</font>00073 <font class="preprocessor">                                         (RTTIClassDescriptor::RTTICreateInstanceFunc)&amp;RTTIDefaultConstructorOf##T, flags); \</font>00074 <font class="preprocessor">    RTTIClassDescriptor* RTTIGetClassDescriptor(T*) {   \</font>00075 <font class="preprocessor">        return &amp;T::RTTIDescriptor; \</font>00076 <font class="preprocessor">    }</font>00077 <font class="preprocessor"></font>00078 <font class="keyword">template</font>&lt;<font class="keyword">class</font> __T&gt;00079 <font class="keyword">inline</font> <a class="code" href="classRTTIType.html">RTTIType</a>* RTTITypeOf(__T&amp;) { 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), &amp;RTTIDescribeFieldsOf##T, \</font>00097 <font class="preprocessor">                                          &amp;RTTIDescribeMethodsOf##T, \</font>00098 <font class="preprocessor">                                         (RTTIClassDescriptor::RTTICreateInstanceFunc)&amp;RTTIDefaultConstructorOf##T, flags); \</font>00099 <font class="preprocessor">    template&lt;&gt; \</font>00100 <font class="preprocessor">    RTTIClassDescriptor* RTTIClassDescriptorHelper&lt;T&gt;::getClassDescriptor() {   \</font>00101 <font class="preprocessor">        return &amp;T::RTTIDescriptor; \</font>00102 <font class="preprocessor">    }</font>00103 <font class="preprocessor"></font>00104 <font class="keyword">template</font>&lt;<font class="keyword">class</font> __T&gt;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>&lt;<font class="keyword">class</font> __T&gt;00111 <font class="keyword">inline</font> <a class="code" href="classRTTIType.html">RTTIType</a>* RTTITypeOf(__T&amp;) { 00112     <font class="keywordflow">return</font> RTTIClassDescriptorHelper&lt;__T&gt;::getClassDescriptor();00113 }00114 <font class="preprocessor">#endif</font>00115 <font class="preprocessor"></font>00116 <font class="keyword">template</font>&lt;&gt;00117 <font class="keyword">inline</font> <a class="code" href="classRTTIType.html">RTTIType</a>* RTTITypeOf(<font class="keywordtype">char</font>&amp;) { 00118     <font class="keywordflow">return</font> &amp;RTTIType::charType;00119 }00120 00121 <font class="keyword">template</font>&lt;&gt;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>&amp;) {00123     <font class="keywordflow">return</font> &amp;RTTIType::ucharType;00124 }00125 00126 <font class="keyword">template</font>&lt;&gt;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>&amp;) {00128     <font class="keywordflow">return</font> &amp;RTTIType::scharType;00129 }00130 00131 <font class="keyword">template</font>&lt;&gt;00132 <font class="keyword">inline</font> <a class="code" href="classRTTIType.html">RTTIType</a>* RTTITypeOf(<font class="keywordtype">short</font>&amp;) {00133     <font class="keywordflow">return</font> &amp;RTTIType::shortType;00134 }00135 00136 <font class="keyword">template</font>&lt;&gt;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>&amp;) { 00138     <font class="keywordflow">return</font> &amp;RTTIType::ushortType;00139 }00140 00141 <font class="keyword">template</font>&lt;&gt;00142 <font class="keyword">inline</font> <a class="code" href="classRTTIType.html">RTTIType</a>* RTTITypeOf(<font class="keywordtype">int</font>&amp;) {00143     <font class="keywordflow">return</font> &amp;RTTIType::intType;00144 }00145 00146 <font class="keyword">template</font>&lt;&gt;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>&amp;) { 00148     <font class="keywordflow">return</font> &amp;RTTIType::uintType;00149 }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -