Martin Wille wrote: > Aleksey Gurtovoy wrote: > ... > > widget w2; > > w.enable(boost::bind(&widget::is_enabled, &w2)); // here! > > w2.enable(false); > > assert(!w.is_enabled()) // ! > > } > > > > Pure & beautiful, IMO. > > Consider a widget class that performs some action on > enabling/disabling (like dimming a button). In that case the > action would be performed for w2 but not for w.
Oh, sorry for a confusion, 'enable' was a bad name for the method because I didn't mean that semantics (and the whole example just wouldn't make much sense). It should have been 'is_enabled(bool_arg_t)' instead, because I was thinking in terms of the model where the widget implementation itself _queries_ the 'widget' object's properties to perform the appropriate system actions, like dimming a button. So, the corrected example would be: class widget { public: // ... typedef boost::function<bool ()> bool_arg_t; self_t& is_enabled(bool_arg_t a_enabled); // note the signature! bool is_enabled() const; }; int main() { widget w; w.is_enabled(true); // ordinary syntax/semantics assert(w.is_enabled()) widget w2; w.is_enabled(boost::bind(&widget::is_enabled, &w2)); // here! w2.is_enabled(false); assert(!w.is_enabled()) // ! } I hope the name change makes the semantics of the above clearer. Aleksey _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost