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

Reply via email to