Hi,
I have some questions about signals.
If I add a function to both Hello and World, from the “Hello
World” example, called alternate() and set up signals like so:
boost::signal<void
(Hello*) > sig_h;
boost::signal<
void (World*) > sig_w;
sig_h.connect(boost::mem_fn(&Hello::alternate));
sig_w.connect(boost::mem_fn(&World::alternate));
I have to define two different signals since the object type
is part of the signal definition. Is there an easy way to get a single
signal to call the alternate() function of both Hello and World?
I recently found this signal slot solution. http://www.codeproject.com/cpp/ElmueSignalsandSlots.asp
There is an extra level of indirection here, in that you
define a slot that points to the function. I’d be interested to see
what people on this forum think about this solution. If I understand things
correctly, this solution doesn’t seem to fit into the categories listed
in the “Choice of Slot Definitions” docs.
Also a general signal slot question. What are the main
reasons why developers don’t use an inherited pure interface for every
callback type? A signal would be a template class with a list of pointers
to the interface and some methods to operate on the list. Not flexible
enough? Doesn’t scale well to larger uses? Time spent calling
virtual functions? I saw this in the boost signal docs that might apply -
“the use of a large number of small adaptor
classes containing virtual functions has been found to cause an unacceptable
increase in the size of executables (polymorphic class types require more code
than non-polymorphic types)”.
Thanks
Frank