实际中,我们需要另外的三个实现用于覆盖 const、volatile 和 const volatile 三种成员函数,这也是为什么传统使用 #define 宏很便捷的原因,让你无需重写代码段,下面是完整的实现:
- template <class F> F* create_delegate(F* f)
- { return f;
- } #define _MEM_DELEGATES(_Q,_NAME)
- template <class T, class R, class ... P> struct _mem_delegate ## _NAME
- { T* m_t;
- R (T::*m_f)(P ...) _Q; _mem_delegate ## _NAME(T* t, R (T::*f)(P ...) _Q):m_t(t),m_f(f) {}
- R operator()(P ... p) _Q {
- return (m_t->*m_f)(p ...); }
- };
- template <class T, class R, class ... P> _mem_delegate ## _NAME<T,R,P ...> create_delegate(T* t, R (T::*f)(P ...) _Q)
- { _mem_delegate ##_NAME<T,R,P ...> d(t,f);
- return d; }
- _MEM_DELEGATES(,Z)
- _MEM_DELEGATES(const,X) _MEM_DELEGATES(volatile,Y)
- _MEM_DELEGATES(const volatile,W)










