
Robert Dailey wrote:
In the case above, I now have an object bound to my function pointer, however I am required to explicitly place a _1, _2, _3 (etc) depending on how many parameters the member function takes. Is there a way that this can be automated? Thanks.
I did something like that using variadic templates (with gcc-4.3 in c++0x mode) for calling member functions without specifying the parameter count. It's something like this: template <class T, class U, class R, class... ARGS> class memfun_caller_t { public: memfun_caller_t(T *ptr, std::function<R(U*,ARGS...)> member) : m_ptr(ptr), m_member(member) {} R operator()(ARGS&&... args) { return m_member(m_ptr, std::forward<ARGS>(args)...); } private: T *m_ptr; std::function<R(U*,ARGS...)> m_member; }; template <class T, class U, class R, class... ARGS> memfun_caller_t<T,U,R,ARGS...> bind(R(T::*member)(ARGS...), U *obj)/*{{{*/ { return memfun_caller_t<T,U,R,ARGS...>(obj, member); } Unfortunately boost::bind didn't help me on this one. If you can't cope with variadic templates, boost::preprocessor could be used to generate overloads. Regards, rod