2016-02-08 15:40 GMT+01:00 Murray Cumming <murr...@murrayc.com>: > On Mon, 2016-02-08 at 12:40 +0000, Jonathan Wakely wrote: > [snip] > > You said (1) "doesn't seem much better" than use-after-move, which I > > disagree with. It's infinitely better because it is not undefined and > > doesn't crash :-) > > Of course. I don't want code that looks wrong and crashes. Sorry for > the confusion caused by my choice of words. > > > But it's not ideal because it doesn't allow rvalues > > to be passed straight from factory functions to sinks. You must > > create > > an intermediate local variable, extract a raw pointer, then use > > std::move to cast back to an rvalue. > > > > Options (2) and (3) both allow rvalues to be passed straight from > > factories to sinks, but allow a non-owning pointer to be obtained at > > the same time. > [snip] > > Ah, now I see your point. Thanks. > > I do find your suggested API awkward (I've renamed add_unique() to add()): > > Button* b = nullptr; //I don't like this being even momentarily > uninitialized. murrayc. >
Just a minor hint here - Button* b {}; should do the trick and it is not that lot more of typing. > c.add(pass_and_observe(button_factory("some button"), b)); > b->blahblah(); > > However, it's just one pass_and_observe() template that works on top of > the simple > add(unique_ptr<>) overloads. People could use it they wanted to, or use a > get_child() > method if they preferred, trying to leave an explicit std::move() as late > as possible > so they didn't need to. I hope we can improve the occasional API that > makes this > difficult currently. > > > By the way, would you want people to use this even without a factory > method? For instance: > > Button* b = nullptr; //I don't like this being even momentarily > uninitialized. murrayc. > c.add(pass_and_observe(std::make_unique<Gtk::Button>("some button"), b)); > b->blahblah(); > > > > -- > Murray Cumming > murr...@murrayc.com > www.murrayc.com > > > > _______________________________________________ > gtkmm-list mailing list > gtkmm-list@gnome.org > https://mail.gnome.org/mailman/listinfo/gtkmm-list >
_______________________________________________ gtkmm-list mailing list gtkmm-list@gnome.org https://mail.gnome.org/mailman/listinfo/gtkmm-list