Stephan,
as I stated before in the [] you need to have a function object which is
called when the if_-condition is evaluated. It should not be a function
call, returning a non-function object!
Replacing Line 148 with:
return n_signal.connect( if_( CallingBack ) [m_signal_callback]);
will compile. If you need more complex szenario you need to make a composite
function object, which calls both functions. Anything in [] should return a
function object.
I suggest you first try to create a sample composite function object without
the whole complex machinery around and try to compile and run it first. Then
you can take the function object over into your sample.
Hope that helps,
Ovanes
On Thu, Jun 24, 2010 at 9:11 AM, Stephan Menzel
Ovanes,
you are right in as much as there's something wrong with what's inside the if. Problem is, I've tried far more than just what I posted here and I couldn't get it to compile once. So I figured I may use if_ the wrong way.
Anyway, not posting a standalone example is generally not a good idea but I wanted to focus more on the general idea and how to tackle it rather than what may be wrong with a particular code example I may or may not have. Anyway, I'll attach at least a standalone test of what I meant here.
It shows the error nicely but contains lots of other crap I've played around with.
Cheers, Stephan
On Wed, Jun 23, 2010 at 6:50 PM, Ovanes Markarian
wrote: Stephan, hi! please see my answer below.
On Wed, Jun 23, 2010 at 5:42 PM, Stephan Menzel < stephan.menzel@gmail.com> wrote:
Unless I want to add something. Unfortunately I can't always take wrap()s output but have to modify a little. In fact, my Queue needs to be templatized as well, modifying the behaviour of the functor. I have a template parameter "Calling". When it is true, another function shall be called by the functor after the method was posted. Now I wanted to do this by phoenix:
template <bool Calling> class Queue { template<typename Handler> void post(Handler n_handler) { m_iosrv.post(n_handler); }; ... template
boost::signals2::connection connect(boost::signals2::signal<SlotSignature> &n_signal, SlotFunction n_method) { return n_signal.connect( if_( CallingBack ) [ post(n_method) , m_signal_callback() ] .else_ [ m_iosrv.wrap( n_method ) ] ); }; ... It is difficult to conclude smth from the code without having a self-containing example. But my assumption is that in the 'else'-branch your code does not generate a function object. As far as I can see in the 'if'-branch your code generates a function object using the the comma-operator (if that operator is overloaded in Phoenix), in the 'else'-branch you just have a normal function call, which is not lazy and does not return a function-object. Hope that helps, Ovanes
_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users
_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users