
Hi Simon, --- simon meiklejohn <simon@simonmeiklejohn.com> wrote:
Is it feasible to accomplish something like this with a class something like the following (but more correct hopefully) <snip code>
Yes, I think it's feasible. It would probably be something more like: class abstract_dispatcher { public: virtual ~abstract_dispatcher(); virtual void post(function<void(void)> f) = 0; virtual void dispatch(function<void(void)> f) = 0; // Note: non-virtual template member function. Can reuse // asio::detail::wrapper_handler to implement it. template <typename Handler> unspecified wrap(Handler h); }; template <typename Dispatcher_Impl> class dispatcher : public abstract_dispatcher { public: // Forwarding constructors here ... void post(function<void(void)> f) { impl_.post(f); } void dispatch(function<void(void)> f) { impl_.dispatch(f); } private: Dispatcher_Impl impl_; }; And to use: // An abstract dispatcher that owns its implementation dispatcher<my_dispatcher> d(... args here ...); // An abstract dispatcher that doesn't own the implementation. demuxer d1; ... dispatcher<demuxer&> d2(d1); Cheers, Chris