$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Rodolfo Schulz de Lima (rodolfo_at_[hidden])
Date: 2008-03-12 16:56:27
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