trunk/src/emu/delegate.h
| r29243 | r29244 | |
| 156 | 156 | // and member function pointer of the appropriate type and number of parameters; we use |
| 157 | 157 | // partial template specialization to support fewer parameters by defaulting the later |
| 158 | 158 | // parameters to the special type _noparam |
| 159 | | template<typename _ClassType, typename _ReturnType, typename _P1Type, typename _P2Type, typename _P3Type, typename _P4Type, typename _P5Type, typename _P6Type, typename _P7Type, typename _P8Type> |
| 159 | |
| 160 | // dummy class used to indicate a non-existant parameter |
| 161 | class _noparam { }; |
| 162 | |
| 163 | template<typename _ClassType, typename _ReturnType, typename _P1Type, typename _P2Type, typename _P3Type, typename _P4Type, typename _P5Type, typename _P6Type, typename _P7Type, typename _P8Type, typename _P9Type, typename _P10Type, typename _P11Type> |
| 160 | 164 | struct delegate_traits |
| 161 | 165 | { |
| 166 | typedef _ReturnType (*static_func_type)(_ClassType *, _P1Type, _P2Type, _P3Type, _P4Type, _P5Type, _P6Type, _P7Type, _P8Type, _P9Type, _P10Type, _P11Type); |
| 167 | typedef _ReturnType (*static_ref_func_type)(_ClassType &, _P1Type, _P2Type, _P3Type, _P4Type, _P5Type, _P6Type, _P7Type, _P8Type, _P9Type, _P10Type, _P11Type); |
| 168 | typedef _ReturnType (_ClassType::*member_func_type)(_P1Type, _P2Type, _P3Type, _P4Type, _P5Type, _P6Type, _P7Type, _P8Type, _P9Type, _P10Type, _P11Type); |
| 169 | }; |
| 170 | |
| 171 | template<typename _ClassType, typename _ReturnType, typename _P1Type, typename _P2Type, typename _P3Type, typename _P4Type, typename _P5Type, typename _P6Type, typename _P7Type, typename _P8Type, typename _P9Type, typename _P10Type> |
| 172 | struct delegate_traits<_ClassType, _ReturnType, _P1Type, _P2Type, _P3Type, _P4Type, _P5Type, _P6Type, _P7Type, _P8Type, _P9Type, _P10Type, _noparam> |
| 173 | { |
| 174 | typedef _ReturnType (*static_func_type)(_ClassType *, _P1Type, _P2Type, _P3Type, _P4Type, _P5Type, _P6Type, _P7Type, _P8Type, _P9Type, _P10Type); |
| 175 | typedef _ReturnType (*static_ref_func_type)(_ClassType &, _P1Type, _P2Type, _P3Type, _P4Type, _P5Type, _P6Type, _P7Type, _P8Type, _P9Type, _P10Type); |
| 176 | typedef _ReturnType (_ClassType::*member_func_type)(_P1Type, _P2Type, _P3Type, _P4Type, _P5Type, _P6Type, _P7Type, _P8Type, _P9Type, _P10Type); |
| 177 | }; |
| 178 | |
| 179 | template<typename _ClassType, typename _ReturnType, typename _P1Type, typename _P2Type, typename _P3Type, typename _P4Type, typename _P5Type, typename _P6Type, typename _P7Type, typename _P8Type, typename _P9Type> |
| 180 | struct delegate_traits<_ClassType, _ReturnType, _P1Type, _P2Type, _P3Type, _P4Type, _P5Type, _P6Type, _P7Type, _P8Type, _P9Type, _noparam, _noparam> |
| 181 | { |
| 182 | typedef _ReturnType (*static_func_type)(_ClassType *, _P1Type, _P2Type, _P3Type, _P4Type, _P5Type, _P6Type, _P7Type, _P8Type, _P9Type); |
| 183 | typedef _ReturnType (*static_ref_func_type)(_ClassType &, _P1Type, _P2Type, _P3Type, _P4Type, _P5Type, _P6Type, _P7Type, _P8Type, _P9Type); |
| 184 | typedef _ReturnType (_ClassType::*member_func_type)(_P1Type, _P2Type, _P3Type, _P4Type, _P5Type, _P6Type, _P7Type, _P8Type, _P9Type); |
| 185 | }; |
| 186 | |
| 187 | template<typename _ClassType, typename _ReturnType, typename _P1Type, typename _P2Type, typename _P3Type, typename _P4Type, typename _P5Type, typename _P6Type, typename _P7Type, typename _P8Type> |
| 188 | struct delegate_traits<_ClassType, _ReturnType, _P1Type, _P2Type, _P3Type, _P4Type, _P5Type, _P6Type, _P7Type, _P8Type, _noparam, _noparam, _noparam> |
| 189 | { |
| 162 | 190 | typedef _ReturnType (*static_func_type)(_ClassType *, _P1Type, _P2Type, _P3Type, _P4Type, _P5Type, _P6Type, _P7Type, _P8Type); |
| 163 | 191 | typedef _ReturnType (*static_ref_func_type)(_ClassType &, _P1Type, _P2Type, _P3Type, _P4Type, _P5Type, _P6Type, _P7Type, _P8Type); |
| 164 | 192 | typedef _ReturnType (_ClassType::*member_func_type)(_P1Type, _P2Type, _P3Type, _P4Type, _P5Type, _P6Type, _P7Type, _P8Type); |
| 165 | 193 | }; |
| 166 | 194 | |
| 167 | | // dummy class used to indicate a non-existant parameter |
| 168 | | class _noparam { }; |
| 169 | | |
| 170 | 195 | template<typename _ClassType, typename _ReturnType, typename _P1Type, typename _P2Type, typename _P3Type, typename _P4Type, typename _P5Type, typename _P6Type, typename _P7Type> |
| 171 | | struct delegate_traits<_ClassType, _ReturnType, _P1Type, _P2Type, _P3Type, _P4Type, _P5Type, _P6Type, _P7Type, _noparam> |
| 196 | struct delegate_traits<_ClassType, _ReturnType, _P1Type, _P2Type, _P3Type, _P4Type, _P5Type, _P6Type, _P7Type, _noparam, _noparam, _noparam, _noparam> |
| 172 | 197 | { |
| 173 | 198 | typedef _ReturnType (*static_func_type)(_ClassType *, _P1Type, _P2Type, _P3Type, _P4Type, _P5Type, _P6Type, _P7Type); |
| 174 | 199 | typedef _ReturnType (*static_ref_func_type)(_ClassType &, _P1Type, _P2Type, _P3Type, _P4Type, _P5Type, _P6Type, _P7Type); |
| r29243 | r29244 | |
| 176 | 201 | }; |
| 177 | 202 | |
| 178 | 203 | template<typename _ClassType, typename _ReturnType, typename _P1Type, typename _P2Type, typename _P3Type, typename _P4Type, typename _P5Type, typename _P6Type> |
| 179 | | struct delegate_traits<_ClassType, _ReturnType, _P1Type, _P2Type, _P3Type, _P4Type, _P5Type, _P6Type, _noparam, _noparam> |
| 204 | struct delegate_traits<_ClassType, _ReturnType, _P1Type, _P2Type, _P3Type, _P4Type, _P5Type, _P6Type, _noparam, _noparam, _noparam, _noparam, _noparam> |
| 180 | 205 | { |
| 181 | 206 | typedef _ReturnType (*static_func_type)(_ClassType *, _P1Type, _P2Type, _P3Type, _P4Type, _P5Type, _P6Type); |
| 182 | 207 | typedef _ReturnType (*static_ref_func_type)(_ClassType &, _P1Type, _P2Type, _P3Type, _P4Type, _P5Type, _P6Type); |
| r29243 | r29244 | |
| 184 | 209 | }; |
| 185 | 210 | |
| 186 | 211 | template<typename _ClassType, typename _ReturnType, typename _P1Type, typename _P2Type, typename _P3Type, typename _P4Type, typename _P5Type> |
| 187 | | struct delegate_traits<_ClassType, _ReturnType, _P1Type, _P2Type, _P3Type, _P4Type, _P5Type, _noparam, _noparam, _noparam> |
| 212 | struct delegate_traits<_ClassType, _ReturnType, _P1Type, _P2Type, _P3Type, _P4Type, _P5Type, _noparam, _noparam, _noparam, _noparam, _noparam, _noparam> |
| 188 | 213 | { |
| 189 | 214 | typedef _ReturnType (*static_func_type)(_ClassType *, _P1Type, _P2Type, _P3Type, _P4Type, _P5Type); |
| 190 | 215 | typedef _ReturnType (*static_ref_func_type)(_ClassType &, _P1Type, _P2Type, _P3Type, _P4Type, _P5Type); |
| r29243 | r29244 | |
| 193 | 218 | |
| 194 | 219 | // specialization for 4 parameters |
| 195 | 220 | template<typename _ClassType, typename _ReturnType, typename _P1Type, typename _P2Type, typename _P3Type, typename _P4Type> |
| 196 | | struct delegate_traits<_ClassType, _ReturnType, _P1Type, _P2Type, _P3Type, _P4Type, _noparam, _noparam, _noparam, _noparam> |
| 221 | struct delegate_traits<_ClassType, _ReturnType, _P1Type, _P2Type, _P3Type, _P4Type, _noparam, _noparam, _noparam, _noparam, _noparam, _noparam, _noparam> |
| 197 | 222 | { |
| 198 | 223 | typedef _ReturnType (*static_func_type)(_ClassType *, _P1Type, _P2Type, _P3Type, _P4Type); |
| 199 | 224 | typedef _ReturnType (*static_ref_func_type)(_ClassType &, _P1Type, _P2Type, _P3Type, _P4Type); |
| r29243 | r29244 | |
| 202 | 227 | |
| 203 | 228 | // specialization for 3 parameters |
| 204 | 229 | template<typename _ClassType, typename _ReturnType, typename _P1Type, typename _P2Type, typename _P3Type> |
| 205 | | struct delegate_traits<_ClassType, _ReturnType, _P1Type, _P2Type, _P3Type, _noparam, _noparam, _noparam, _noparam, _noparam> |
| 230 | struct delegate_traits<_ClassType, _ReturnType, _P1Type, _P2Type, _P3Type, _noparam, _noparam, _noparam, _noparam, _noparam, _noparam, _noparam, _noparam> |
| 206 | 231 | { |
| 207 | 232 | typedef _ReturnType (*static_func_type)(_ClassType *, _P1Type, _P2Type, _P3Type); |
| 208 | 233 | typedef _ReturnType (*static_ref_func_type)(_ClassType &, _P1Type, _P2Type, _P3Type); |
| r29243 | r29244 | |
| 211 | 236 | |
| 212 | 237 | // specialization for 2 parameters |
| 213 | 238 | template<typename _ClassType, typename _ReturnType, typename _P1Type, typename _P2Type> |
| 214 | | struct delegate_traits<_ClassType, _ReturnType, _P1Type, _P2Type, _noparam, _noparam, _noparam, _noparam, _noparam, _noparam> |
| 239 | struct delegate_traits<_ClassType, _ReturnType, _P1Type, _P2Type, _noparam, _noparam, _noparam, _noparam, _noparam, _noparam, _noparam, _noparam, _noparam> |
| 215 | 240 | { |
| 216 | 241 | typedef _ReturnType (*static_func_type)(_ClassType *, _P1Type, _P2Type); |
| 217 | 242 | typedef _ReturnType (*static_ref_func_type)(_ClassType &, _P1Type, _P2Type); |
| r29243 | r29244 | |
| 220 | 245 | |
| 221 | 246 | // specialization for 1 parameter |
| 222 | 247 | template<typename _ClassType, typename _ReturnType, typename _P1Type> |
| 223 | | struct delegate_traits<_ClassType, _ReturnType, _P1Type, _noparam, _noparam, _noparam, _noparam, _noparam, _noparam, _noparam> |
| 248 | struct delegate_traits<_ClassType, _ReturnType, _P1Type, _noparam, _noparam, _noparam, _noparam, _noparam, _noparam, _noparam, _noparam, _noparam, _noparam> |
| 224 | 249 | { |
| 225 | 250 | typedef _ReturnType (*static_func_type)(_ClassType *, _P1Type); |
| 226 | 251 | typedef _ReturnType (*static_ref_func_type)(_ClassType &, _P1Type); |
| r29243 | r29244 | |
| 229 | 254 | |
| 230 | 255 | // specialization for no parameters |
| 231 | 256 | template<typename _ClassType, typename _ReturnType> |
| 232 | | struct delegate_traits<_ClassType, _ReturnType, _noparam, _noparam, _noparam, _noparam, _noparam, _noparam, _noparam, _noparam> |
| 257 | struct delegate_traits<_ClassType, _ReturnType, _noparam, _noparam, _noparam, _noparam, _noparam, _noparam, _noparam, _noparam, _noparam, _noparam, _noparam> |
| 233 | 258 | { |
| 234 | 259 | typedef _ReturnType (*static_func_type)(_ClassType *); |
| 235 | 260 | typedef _ReturnType (*static_ref_func_type)(_ClassType &); |
| r29243 | r29244 | |
| 375 | 400 | return (reinterpret_cast<_FunctionClass *>(_this->m_realobject)->*mfp)(p1, p2, p3, p4, p5, p6, p7, p8); |
| 376 | 401 | } |
| 377 | 402 | |
| 403 | template<class _FunctionClass, typename _ReturnType, typename _P1Type, typename _P2Type, typename _P3Type, typename _P4Type, typename _P5Type, typename _P6Type, typename _P7Type, typename _P8Type, typename _P9Type> |
| 404 | static _ReturnType method_stub(delegate_generic_class *object, _P1Type p1, _P2Type p2, _P3Type p3, _P4Type p4, _P5Type p5, _P6Type p6, _P7Type p7, _P8Type p8, _P9Type p9) |
| 405 | { |
| 406 | delegate_mfp *_this = reinterpret_cast<delegate_mfp *>(object); |
| 407 | typedef _ReturnType (_FunctionClass::*mfptype)(_P1Type p1, _P2Type p2, _P3Type p3, _P4Type p4, _P5Type p5, _P6Type p6, _P7Type p7, _P8Type p8, _P9Type p9); |
| 408 | mfptype &mfp = *reinterpret_cast<mfptype *>(&_this->m_rawdata); |
| 409 | return (reinterpret_cast<_FunctionClass *>(_this->m_realobject)->*mfp)(p1, p2, p3, p4, p5, p6, p7, p8, p9); |
| 410 | } |
| 411 | |
| 412 | template<class _FunctionClass, typename _ReturnType, typename _P1Type, typename _P2Type, typename _P3Type, typename _P4Type, typename _P5Type, typename _P6Type, typename _P7Type, typename _P8Type, typename _P9Type, typename _P10Type> |
| 413 | static _ReturnType method_stub(delegate_generic_class *object, _P1Type p1, _P2Type p2, _P3Type p3, _P4Type p4, _P5Type p5, _P6Type p6, _P7Type p7, _P8Type p8, _P9Type p9, _P10Type p10) |
| 414 | { |
| 415 | delegate_mfp *_this = reinterpret_cast<delegate_mfp *>(object); |
| 416 | typedef _ReturnType (_FunctionClass::*mfptype)(_P1Type p1, _P2Type p2, _P3Type p3, _P4Type p4, _P5Type p5, _P6Type p6, _P7Type p7, _P8Type p8, _P9Type p9, _P10Type p10); |
| 417 | mfptype &mfp = *reinterpret_cast<mfptype *>(&_this->m_rawdata); |
| 418 | return (reinterpret_cast<_FunctionClass *>(_this->m_realobject)->*mfp)(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10); |
| 419 | } |
| 420 | |
| 421 | template<class _FunctionClass, typename _ReturnType, typename _P1Type, typename _P2Type, typename _P3Type, typename _P4Type, typename _P5Type, typename _P6Type, typename _P7Type, typename _P8Type, typename _P9Type, typename _P10Type, typename _P11Type> |
| 422 | static _ReturnType method_stub(delegate_generic_class *object, _P1Type p1, _P2Type p2, _P3Type p3, _P4Type p4, _P5Type p5, _P6Type p6, _P7Type p7, _P8Type p8, _P9Type p9, _P10Type p10, _P11Type p11) |
| 423 | { |
| 424 | delegate_mfp *_this = reinterpret_cast<delegate_mfp *>(object); |
| 425 | typedef _ReturnType (_FunctionClass::*mfptype)(_P1Type p1, _P2Type p2, _P3Type p3, _P4Type p4, _P5Type p5, _P6Type p6, _P7Type p7, _P8Type p8, _P9Type p9, _P10Type p10, _P11Type p11); |
| 426 | mfptype &mfp = *reinterpret_cast<mfptype *>(&_this->m_rawdata); |
| 427 | return (reinterpret_cast<_FunctionClass *>(_this->m_realobject)->*mfp)(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11); |
| 428 | } |
| 429 | |
| 378 | 430 | // helper to convert a function of a given type to a generic function, forcing template |
| 379 | 431 | // instantiation to match the source type |
| 380 | 432 | template <typename _SourceType> |
| r29243 | r29244 | |
| 463 | 515 | // ======================> delegate_base |
| 464 | 516 | |
| 465 | 517 | // general delegate class template supporting up to 5 parameters |
| 466 | | template<typename _ReturnType, typename _P1Type = _noparam, typename _P2Type = _noparam, typename _P3Type = _noparam, typename _P4Type = _noparam, typename _P5Type = _noparam, typename _P6Type = _noparam, typename _P7Type = _noparam, typename _P8Type = _noparam> |
| 518 | template<typename _ReturnType, typename _P1Type = _noparam, typename _P2Type = _noparam, typename _P3Type = _noparam, typename _P4Type = _noparam, typename _P5Type = _noparam, typename _P6Type = _noparam, typename _P7Type = _noparam, typename _P8Type = _noparam, typename _P9Type = _noparam, typename _P10Type = _noparam, typename _P11Type = _noparam> |
| 467 | 519 | class delegate_base |
| 468 | 520 | { |
| 469 | 521 | public: |
| r29243 | r29244 | |
| 471 | 523 | template<class _FunctionClass> |
| 472 | 524 | struct traits |
| 473 | 525 | { |
| 474 | | typedef typename delegate_traits<_FunctionClass, _ReturnType, _P1Type, _P2Type, _P3Type, _P4Type, _P5Type, _P6Type, _P7Type, _P8Type>::member_func_type member_func_type; |
| 475 | | typedef typename delegate_traits<_FunctionClass, _ReturnType, _P1Type, _P2Type, _P3Type, _P4Type, _P5Type, _P6Type, _P7Type, _P8Type>::static_func_type static_func_type; |
| 476 | | typedef typename delegate_traits<_FunctionClass, _ReturnType, _P1Type, _P2Type, _P3Type, _P4Type, _P5Type, _P6Type, _P7Type, _P8Type>::static_ref_func_type static_ref_func_type; |
| 526 | typedef typename delegate_traits<_FunctionClass, _ReturnType, _P1Type, _P2Type, _P3Type, _P4Type, _P5Type, _P6Type, _P7Type, _P8Type, _P9Type, _P10Type, _P11Type>::member_func_type member_func_type; |
| 527 | typedef typename delegate_traits<_FunctionClass, _ReturnType, _P1Type, _P2Type, _P3Type, _P4Type, _P5Type, _P6Type, _P7Type, _P8Type, _P9Type, _P10Type, _P11Type>::static_func_type static_func_type; |
| 528 | typedef typename delegate_traits<_FunctionClass, _ReturnType, _P1Type, _P2Type, _P3Type, _P4Type, _P5Type, _P6Type, _P7Type, _P8Type, _P9Type, _P10Type, _P11Type>::static_ref_func_type static_ref_func_type; |
| 477 | 529 | }; |
| 478 | 530 | typedef typename traits<delegate_generic_class>::static_func_type generic_static_func; |
| 479 | 531 | |
| r29243 | r29244 | |
| 578 | 630 | _ReturnType operator()(_P1Type p1, _P2Type p2, _P3Type p3, _P4Type p4, _P5Type p5, _P6Type p6) const { return (*m_function)(m_object, p1, p2, p3, p4, p5, p6); } |
| 579 | 631 | _ReturnType operator()(_P1Type p1, _P2Type p2, _P3Type p3, _P4Type p4, _P5Type p5, _P6Type p6, _P7Type p7) const { return (*m_function)(m_object, p1, p2, p3, p4, p5, p6, p7); } |
| 580 | 632 | _ReturnType operator()(_P1Type p1, _P2Type p2, _P3Type p3, _P4Type p4, _P5Type p5, _P6Type p6, _P7Type p7, _P8Type p8) const { return (*m_function)(m_object, p1, p2, p3, p4, p5, p6, p7, p8); } |
| 633 | _ReturnType operator()(_P1Type p1, _P2Type p2, _P3Type p3, _P4Type p4, _P5Type p5, _P6Type p6, _P7Type p7, _P8Type p8, _P9Type p9) const { return (*m_function)(m_object, p1, p2, p3, p4, p5, p6, p7, p8, p9); } |
| 634 | _ReturnType operator()(_P1Type p1, _P2Type p2, _P3Type p3, _P4Type p4, _P5Type p5, _P6Type p6, _P7Type p7, _P8Type p8, _P9Type p9, _P10Type p10) const { return (*m_function)(m_object, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10); } |
| 635 | _ReturnType operator()(_P1Type p1, _P2Type p2, _P3Type p3, _P4Type p4, _P5Type p5, _P6Type p6, _P7Type p7, _P8Type p8, _P9Type p9, _P10Type p10, _P11Type p11) const { return (*m_function)(m_object, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11); } |
| 581 | 636 | |
| 582 | 637 | // getters |
| 583 | 638 | bool has_object() const { return (object() != NULL); } |
| r29243 | r29244 | |
| 791 | 846 | delegate &operator=(const basetype &src) { *static_cast<basetype *>(this) = src; return *this; } |
| 792 | 847 | }; |
| 793 | 848 | |
| 849 | // specialize for 9 parameters |
| 850 | template<typename _ReturnType, typename _P1Type, typename _P2Type, typename _P3Type, typename _P4Type, typename _P5Type, typename _P6Type, typename _P7Type, typename _P8Type, typename _P9Type> |
| 851 | class delegate<_ReturnType (_P1Type, _P2Type, _P3Type, _P4Type, _P5Type, _P6Type, _P7Type, _P8Type, _P9Type)> : public delegate_base<_ReturnType, _P1Type, _P2Type, _P3Type, _P4Type, _P5Type, _P6Type, _P7Type, _P8Type, _P9Type> |
| 852 | { |
| 853 | typedef delegate_base<_ReturnType, _P1Type, _P2Type, _P3Type, _P4Type, _P5Type, _P6Type, _P7Type, _P8Type, _P9Type> basetype; |
| 854 | |
| 855 | public: |
| 856 | // create a standard set of constructors |
| 857 | delegate() : basetype() { } |
| 858 | delegate(const basetype &src) : basetype(src) { } |
| 859 | delegate(const basetype &src, delegate_late_bind &object) : basetype(src, object) { } |
| 860 | template<class _FunctionClass> delegate(typename basetype::template traits<_FunctionClass>::member_func_type funcptr, const char *name, _FunctionClass *object) : basetype(funcptr, name, object) { } |
| 861 | template<class _FunctionClass> delegate(typename basetype::template traits<_FunctionClass>::static_func_type funcptr, const char *name, _FunctionClass *object) : basetype(funcptr, name, object) { } |
| 862 | template<class _FunctionClass> delegate(typename basetype::template traits<_FunctionClass>::static_ref_func_type funcptr, const char *name, _FunctionClass *object) : basetype(funcptr, name, object) { } |
| 863 | delegate &operator=(const basetype &src) { *static_cast<basetype *>(this) = src; return *this; } |
| 864 | }; |
| 865 | |
| 866 | // specialize for 10 parameters |
| 867 | template<typename _ReturnType, typename _P1Type, typename _P2Type, typename _P3Type, typename _P4Type, typename _P5Type, typename _P6Type, typename _P7Type, typename _P8Type, typename _P9Type, typename _P10Type> |
| 868 | class delegate<_ReturnType (_P1Type, _P2Type, _P3Type, _P4Type, _P5Type, _P6Type, _P7Type, _P8Type, _P9Type, _P10Type)> : public delegate_base<_ReturnType, _P1Type, _P2Type, _P3Type, _P4Type, _P5Type, _P6Type, _P7Type, _P8Type, _P9Type, _P10Type> |
| 869 | { |
| 870 | typedef delegate_base<_ReturnType, _P1Type, _P2Type, _P3Type, _P4Type, _P5Type, _P6Type, _P7Type, _P8Type, _P9Type, _P10Type> basetype; |
| 871 | |
| 872 | public: |
| 873 | // create a standard set of constructors |
| 874 | delegate() : basetype() { } |
| 875 | delegate(const basetype &src) : basetype(src) { } |
| 876 | delegate(const basetype &src, delegate_late_bind &object) : basetype(src, object) { } |
| 877 | template<class _FunctionClass> delegate(typename basetype::template traits<_FunctionClass>::member_func_type funcptr, const char *name, _FunctionClass *object) : basetype(funcptr, name, object) { } |
| 878 | template<class _FunctionClass> delegate(typename basetype::template traits<_FunctionClass>::static_func_type funcptr, const char *name, _FunctionClass *object) : basetype(funcptr, name, object) { } |
| 879 | template<class _FunctionClass> delegate(typename basetype::template traits<_FunctionClass>::static_ref_func_type funcptr, const char *name, _FunctionClass *object) : basetype(funcptr, name, object) { } |
| 880 | delegate &operator=(const basetype &src) { *static_cast<basetype *>(this) = src; return *this; } |
| 881 | }; |
| 882 | |
| 883 | // specialize for 11 parameters |
| 884 | template<typename _ReturnType, typename _P1Type, typename _P2Type, typename _P3Type, typename _P4Type, typename _P5Type, typename _P6Type, typename _P7Type, typename _P8Type, typename _P9Type, typename _P10Type, typename _P11Type> |
| 885 | class delegate<_ReturnType (_P1Type, _P2Type, _P3Type, _P4Type, _P5Type, _P6Type, _P7Type, _P8Type, _P9Type, _P10Type, _P11Type)> : public delegate_base<_ReturnType, _P1Type, _P2Type, _P3Type, _P4Type, _P5Type, _P6Type, _P7Type, _P8Type, _P9Type, _P10Type, _P11Type> |
| 886 | { |
| 887 | typedef delegate_base<_ReturnType, _P1Type, _P2Type, _P3Type, _P4Type, _P5Type, _P6Type, _P7Type, _P8Type, _P9Type, _P10Type, _P11Type> basetype; |
| 888 | |
| 889 | public: |
| 890 | // create a standard set of constructors |
| 891 | delegate() : basetype() { } |
| 892 | delegate(const basetype &src) : basetype(src) { } |
| 893 | delegate(const basetype &src, delegate_late_bind &object) : basetype(src, object) { } |
| 894 | template<class _FunctionClass> delegate(typename basetype::template traits<_FunctionClass>::member_func_type funcptr, const char *name, _FunctionClass *object) : basetype(funcptr, name, object) { } |
| 895 | template<class _FunctionClass> delegate(typename basetype::template traits<_FunctionClass>::static_func_type funcptr, const char *name, _FunctionClass *object) : basetype(funcptr, name, object) { } |
| 896 | template<class _FunctionClass> delegate(typename basetype::template traits<_FunctionClass>::static_ref_func_type funcptr, const char *name, _FunctionClass *object) : basetype(funcptr, name, object) { } |
| 897 | delegate &operator=(const basetype &src) { *static_cast<basetype *>(this) = src; return *this; } |
| 898 | }; |
| 794 | 899 | #endif /* __DELEGATE_H__ */ |