Are you thinking something like?

class NoRegion : public Region {...};

auto parent = region.getParent();
if (NoRegion == parent) {
  // no parent region
}


On Tue, Oct 10, 2017 at 11:08 AM David Kimura <dkim...@pivotal.io> wrote:

> I'm not sure if this is the same as the sentinel value you mentioned, but
> what about introducing a no-op region type and returning that?  I'm
> thinking a null object pattern which would no-op and then nobody should
> need to check if nullptr.
>
> Thanks,
> David
>
> On Tue, Oct 10, 2017 at 10:27 AM, Jacob Barrett <jbarr...@pivotal.io>
> wrote:
>
> > Looking at a class like Region (Region.cpp) there are calls to get the
> > parent region and sub regions, there are instances where a Region will
> not
> > have a parent or subs. The current API returns shared_ptr that may be
> > nullptr or a Region.
> >
> > Since we are trying to make an effort towards values over pointers should
> > be considered some changes here? Obviously a reference is out of the
> > question because it can't be null. A value is really out of the question
> > too since it can't be null and making a sentinel value is not a great
> > solution. Raw pointers are fine since they can be nullptr but make
> > ownership ambiguous. Using shared_ptr is good since it can be nullptr and
> > solves the ownership problem. Another option is to embrace the
> forthcoming
> > std::optional available as boost::optional in C++11.
> >
> > I am leaning towards keeping it shared_ptr since using boost::optional
> > would require users compile with boost. I don't think we should have
> > anything on our API that is not ours of C++11. Requiring third party
> > libraries to compile against our API doesn't fly right by me.
> >
> > Thoughts?
> >
>

Reply via email to