C++中关于委派(Delegates)的实现示例

2020-01-06 13:19:38于丽
  • {  _mem_delegate<T,R,P ...> d(t,f); 
  • return d;  } 

    实际中,我们需要另外的三个实现用于覆盖 const、volatile 和 const volatile 三种成员函数,这也是为什么传统使用 #define 宏很便捷的原因,让你无需重写代码段,下面是完整的实现:

     

     
    1. template <class F>  F* create_delegate(F* f) 
    2. {  return f; 
    3. }  #define _MEM_DELEGATES(_Q,_NAME) 
    4. template <class T, class R, class ... P>  struct _mem_delegate ## _NAME 
    5. {  T* m_t; 
    6. R (T::*m_f)(P ...) _Q;  _mem_delegate ## _NAME(T* t, R (T::*f)(P ...) _Q):m_t(t),m_f(f) {} 
    7. R operator()(P ... p) _Q  { 
    8. return (m_t->*m_f)(p ...);  } 
    9. };   
    10. template <class T, class R, class ... P>  _mem_delegate ## _NAME<T,R,P ...> create_delegate(T* t, R (T::*f)(P ...) _Q) 
    11. {  _mem_delegate ##_NAME<T,R,P ...> d(t,f); 
    12. return d;  } 
    13.   _MEM_DELEGATES(,Z) 
    14. _MEM_DELEGATES(const,X)  _MEM_DELEGATES(volatile,Y) 
    15. _MEM_DELEGATES(const volatile,W)