MyGUI
3.2.1
|
00001 /* 00002 * This source file is part of MyGUI. For the latest info, see http://mygui.info/ 00003 * Distributed under the MIT License 00004 * (See accompanying file COPYING.MIT or copy at http://opensource.org/licenses/MIT) 00005 */ 00006 00007 #ifndef __MYGUI_DELEGATE_H__ 00008 #define __MYGUI_DELEGATE_H__ 00009 00010 #include "MyGUI_Diagnostic.h" 00011 #include <list> 00012 00013 #include <typeinfo> 00014 00015 // source 00016 // http://rsdn.ru/article/cpp/delegates.xml 00017 00018 // генерация делегатов для различного колличества параметров 00019 namespace MyGUI 00020 { 00021 00022 namespace delegates 00023 { 00024 // базовый класс для тех классов, что хотят себя отвязывать от мульти делегатов 00025 class MYGUI_EXPORT IDelegateUnlink 00026 { 00027 public: 00028 virtual ~IDelegateUnlink() { } 00029 00030 IDelegateUnlink() 00031 { 00032 m_baseDelegateUnlink = this; 00033 } 00034 bool compare(IDelegateUnlink* _unlink) const 00035 { 00036 return m_baseDelegateUnlink == _unlink->m_baseDelegateUnlink; 00037 } 00038 00039 private: 00040 IDelegateUnlink* m_baseDelegateUnlink; 00041 }; 00042 00043 inline IDelegateUnlink* GetDelegateUnlink(void* _base) 00044 { 00045 return 0; 00046 } 00047 inline IDelegateUnlink* GetDelegateUnlink(IDelegateUnlink* _base) 00048 { 00049 return _base; 00050 } 00051 } 00052 00053 // no parameters 00054 #define MYGUI_SUFFIX 0 00055 #define MYGUI_TEMPLATE 00056 #define MYGUI_TEMPLATE_PARAMS 00057 #define MYGUI_TEMPLATE_ARGS 00058 #define MYGUI_T_TEMPLATE_PARAMS <typename T> 00059 #define MYGUI_T_TEMPLATE_ARGS <T> 00060 #define MYGUI_PARAMS 00061 #define MYGUI_ARGS 00062 #define MYGUI_TYPENAME 00063 00064 #include "MyGUI_DelegateImplement.h" 00065 00066 // one parameter 00067 #define MYGUI_SUFFIX 1 00068 #define MYGUI_TEMPLATE template 00069 #define MYGUI_TEMPLATE_PARAMS <typename TP1> 00070 #define MYGUI_TEMPLATE_ARGS <TP1> 00071 #define MYGUI_T_TEMPLATE_PARAMS <typename T, typename TP1> 00072 #define MYGUI_T_TEMPLATE_ARGS <T, TP1> 00073 #define MYGUI_PARAMS TP1 p1 00074 #define MYGUI_ARGS p1 00075 #define MYGUI_TYPENAME typename 00076 00077 #include "MyGUI_DelegateImplement.h" 00078 00079 // two parameters 00080 #define MYGUI_SUFFIX 2 00081 #define MYGUI_TEMPLATE template 00082 #define MYGUI_TEMPLATE_PARAMS <typename TP1, typename TP2> 00083 #define MYGUI_TEMPLATE_ARGS <TP1, TP2> 00084 #define MYGUI_T_TEMPLATE_PARAMS <typename T, typename TP1, typename TP2> 00085 #define MYGUI_T_TEMPLATE_ARGS <T, TP1, TP2> 00086 #define MYGUI_PARAMS TP1 p1, TP2 p2 00087 #define MYGUI_ARGS p1, p2 00088 #define MYGUI_TYPENAME typename 00089 00090 #include "MyGUI_DelegateImplement.h" 00091 00092 // three parameters 00093 #define MYGUI_SUFFIX 3 00094 #define MYGUI_TEMPLATE template 00095 #define MYGUI_TEMPLATE_PARAMS <typename TP1, typename TP2, typename TP3> 00096 #define MYGUI_TEMPLATE_ARGS <TP1, TP2, TP3> 00097 #define MYGUI_T_TEMPLATE_PARAMS <typename T, typename TP1, typename TP2, typename TP3> 00098 #define MYGUI_T_TEMPLATE_ARGS <T, TP1, TP2, TP3> 00099 #define MYGUI_PARAMS TP1 p1, TP2 p2, TP3 p3 00100 #define MYGUI_ARGS p1, p2, p3 00101 #define MYGUI_TYPENAME typename 00102 00103 #include "MyGUI_DelegateImplement.h" 00104 00105 // four parameters 00106 #define MYGUI_SUFFIX 4 00107 #define MYGUI_TEMPLATE template 00108 #define MYGUI_TEMPLATE_PARAMS <typename TP1, typename TP2, typename TP3, typename TP4> 00109 #define MYGUI_TEMPLATE_ARGS <TP1, TP2, TP3, TP4> 00110 #define MYGUI_T_TEMPLATE_PARAMS <typename T, typename TP1, typename TP2, typename TP3, typename TP4> 00111 #define MYGUI_T_TEMPLATE_ARGS <T, TP1, TP2, TP3, TP4> 00112 #define MYGUI_PARAMS TP1 p1, TP2 p2, TP3 p3, TP4 p4 00113 #define MYGUI_ARGS p1, p2, p3, p4 00114 #define MYGUI_TYPENAME typename 00115 00116 #include "MyGUI_DelegateImplement.h" 00117 00118 // five parameters 00119 #define MYGUI_SUFFIX 5 00120 #define MYGUI_TEMPLATE template 00121 #define MYGUI_TEMPLATE_PARAMS <typename TP1, typename TP2, typename TP3, typename TP4, typename TP5> 00122 #define MYGUI_TEMPLATE_ARGS <TP1, TP2, TP3, TP4, TP5> 00123 #define MYGUI_T_TEMPLATE_PARAMS <typename T, typename TP1, typename TP2, typename TP3, typename TP4, typename TP5> 00124 #define MYGUI_T_TEMPLATE_ARGS <T, TP1, TP2, TP3, TP4, TP5> 00125 #define MYGUI_PARAMS TP1 p1, TP2 p2, TP3 p3, TP4 p4, TP5 p5 00126 #define MYGUI_ARGS p1, p2, p3, p4, p5 00127 #define MYGUI_TYPENAME typename 00128 00129 #include "MyGUI_DelegateImplement.h" 00130 00131 // six parameters 00132 #define MYGUI_SUFFIX 6 00133 #define MYGUI_TEMPLATE template 00134 #define MYGUI_TEMPLATE_PARAMS <typename TP1, typename TP2, typename TP3, typename TP4, typename TP5, typename TP6> 00135 #define MYGUI_TEMPLATE_ARGS <TP1, TP2, TP3, TP4, TP5, TP6> 00136 #define MYGUI_T_TEMPLATE_PARAMS <typename T, typename TP1, typename TP2, typename TP3, typename TP4, typename TP5, typename TP6> 00137 #define MYGUI_T_TEMPLATE_ARGS <T, TP1, TP2, TP3, TP4, TP5, TP6> 00138 #define MYGUI_PARAMS TP1 p1, TP2 p2, TP3 p3, TP4 p4, TP5 p5, TP6 p6 00139 #define MYGUI_ARGS p1, p2, p3, p4, p5, p6 00140 #define MYGUI_TYPENAME typename 00141 00142 #include "MyGUI_DelegateImplement.h" 00143 00144 00145 } // namespace MyGUI 00146 00147 #endif // __MYGUI_DELEGATE_H__