
On Wed, Nov 7, 2012 at 3:21 PM, Nathan Crookston wrote: Hi Brian, On Wed, Nov 7, 2012 at 4:04 PM, Brian Budge Hi all - I have a case where I have a largeish inheritance hierarchy. I will be
calling an initialization function on all objects before using them in some
fashion. Basically what I need to happen is when I call init() on a Foo the
following would occur: void Foo::init() {
super::init();
// now with the knowledge that anything I inherited is set up, I can
set myself up...
} When I'm dealing with a situation like you describe (not using
constructors), I find that Boost.Signals (or Signals2) do what I'm looking
for. I generally do something like the following: class B
{
typedef boost::signal void onInit() { onInit_(); }
}; class D : public B
{
D() { connectOnInitListener(bind(&D::onInitImpl, this)); } // Register
our onInit handler.
}; //Repeat for further derivatives. This means I don't need to state whom I inherit from, the order of calling
is determined by the order of construction, and if one method doesn't need
to listen for the onInit signal, everything works as expected. HTH,
Nate Hi Nate -
Yes, this seems quite useful. With signal connect, I guess it's
more-or-less pushing-back on a list of function objects? When the signal
is called, it iterates the list and calls each function object?
Thanks for the suggestion. Seems like a good way to go.
Brian