Boost logo

Boost :

From: Jody Hagins (jody-boost-011304_at_[hidden])
Date: 2004-02-17 17:01:29


When signalling, with no slots connected, an assertion is raised (if the
return type of the slot is not void). For example:

    boost::signal<void ()> sig;
    sig();

does "nothing" while

    boost::signal<int ()> sig;
    sig();

asserts (if the default combiner is used). I guess that makes sense,
because there can be no "combined" return value if there are no slots.
However, an assertion seems a bit harsh. I am really not sure what
should happen, but maybe an exception is a better alternative, or maybe
an alternative interface can define a default value to be returned if
there are no slots connected), or maybe something else...

Anyway, I guess I was wanting to know why this is the case, and what is
the usual method of handling this circumstance. I assume something
like:

    if (!sig.empty())
    {
      result = sig();
    }

but that just does not look pretty...


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk