Murray Cumming wrote:
>
> James Lin wrote:
> > So if you could add sigc::signal<>::block/unblock methods, then we
> > could stop using sigc::signal<>::slots (and have a better mechanism
> > to do what we want).
>
> Wouldn't it be best to just not emit signals that you don't want to
> emit?

Ideally, yes, but in practice I think it's easier said than done.  For example, 
suppose you have some object with a coarse-grained `changed` signal that is 
automatically emitted whenever a mutator on it is called.  But perhaps a client 
wants to mutate multiple properties on that object at once and does not want to 
trigger a flurry of unnecessary callbacks.  I think it'd be better for the 
client to temporarily block the signal than to:
A. Add arguments to every mutator to opt out of signal emission.
B. Add a non-emitting version of each mutator.
C. Add mutator methods that update different combinations of properties.

A signal also could be connected to another signal.  In that case, one could 
block the sigc::connection for the child signal, but keeping track of that is 
additional bookkeeping.

I suppose another alternative would be to create a separate class that wraps a 
specific type of sigc::signal, but that seems a bit awkward.

To some degree I also think that having sigc::signal::block/unblock methods 
would be nice for consistency with sigc::slot and sigc::connection.

- James
_______________________________________________
libsigc-list mailing list
libsigc-list@gnome.org
https://mail.gnome.org/mailman/listinfo/libsigc-list

Reply via email to