Boost logo

Boost :

From: kolach56_at_[hidden]
Date: 2005-02-21 05:12:48


I used boost::signals in number of projects and found one thing
inconvenient. I could easily connect anything to signal but sometimes it
became hard to disconnect form it.

It's ok if a connection time is bounded by a lifetime of trackable
or connection objects. I used to use Group id for disconnection,
but sometimes I needed it for call priority. ( In that case I would write
a special GroupCompare function but it looked ugly. )

For experimental purposes, I constructed an alternative approach.
For connection/disconnection management I used the following syntax:

struct Test
{
  void test( bool, int );
};

void f( bool );

signal<void (bool)> s;
s.connect( &Test::test, t, _1, 5 );
s.disconnect( &Test::test, t, _1, 5 );
s.connect( &f, _1 );
s.disconnect( &f, _1 );

I just form a hash code from the arguments.
It certainly makes the process longer, but in most cases I don't need
something extremely fast there. In my projects,
the performance is important in invocation process.

It's only a variant, there might be a lot of other ways.

So actually my suggestion is why not to have both approaches of
connection/disconnection management? One for fast
connection/disconnection and the other for
extra control over it.

-- 
Best regards,
 Nick                          mailto:kolach56_at_[hidden]

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