1 /*! 2 @file 3 @author Albert Semenov 4 @date 01/2009 5 @module 6 */ 7 #pragma once 8 9 #include <MyGUI.h> 10 #include <gcroot.h> 11 12 #include "Marshaling.h" 13 14 namespace MyGUI 15 { 16 namespace Managed 17 { 18 19 template <typename MD, typename T1, typename T2, typename T3, typename T4> 20 class Delegate4 : public MyGUI::delegates::IDelegate4<T1, T2, T3, T4> 21 { 22 public: Delegate4(MD _delegate)23 Delegate4 (MD _delegate) : mDelegate(_delegate) { } 24 isType(const std::type_info & _type)25 virtual bool isType( const std::type_info& _type) 26 { 27 return typeid( Delegate4<MD, T1, T2, T3, T4> ) == _type; 28 } 29 invoke(T1 p1,T2 p2,T3 p3,T4 p4)30 virtual void invoke( T1 p1, T2 p2, T3 p3, T4 p4 ) 31 { 32 ((MD)mDelegate)(Convert<T1>::To(p1), Convert<T2>::To(p2), Convert<T3>::To(p3), Convert<T4>::To(p4)); 33 } 34 compare(MyGUI::delegates::IDelegate4<T1,T2,T3,T4> * _delegate)35 virtual bool compare( MyGUI::delegates::IDelegate4<T1, T2, T3, T4> * _delegate) const 36 { 37 if (nullptr == _delegate || false == _delegate->isType(typeid(Delegate4<MD, T1, T2, T3, T4>)) ) return false; 38 Delegate4<MD, T1, T2, T3, T4> * cast = static_cast<Delegate4<MD, T1, T2, T3, T4> *>(_delegate); 39 return ((MD)cast->mDelegate) == ((MD)mDelegate); 40 } 41 42 private: 43 gcroot<MD> mDelegate; 44 }; 45 46 } // namespace Managed 47 } // namespace MyGUI 48