
On Mon, Jul 19, 2010 at 5:37 PM, David Sankel <camior@gmail.com> wrote:
I'm wondering if there's a way I can generically get the result type of boost bind.
I'd like to write something along these lines:
template< typename StreamT, typename Sink > typename boost::result_of< boost::Bind( StreamT, boost::arg<1>, Sink )
::type apSink( StreamT t, Sink sk ) { return boost::bind( t , _1 , sk ); }
I'm not interested in a boost::function solution because I require that uses apSink's result can be inlined. Any ideas? Perhaps one of these other bind-like libraries has an answer to this.
To my knowledge there is no general way to declare the return type of boost::bind (or a Boost Lambda expression). In C++03 the best we can do is boost::function, which can store arbitrary function objects without having to know the type. In C++0x, the compiler can deduce the type so that you don't have to declare it. template< typename StreamT, typename Sink > auto apSink( StreamT t, Sink sk ) -> decltype(boost::bind(t, _1, sk)) { return boost::bind( t , _1 , sk ); } Hope that helps. Daniel Walker