Date: Tue, 29 Oct 2024 22:40:54 +0000
On Tue, 29 Oct 2024, 21:58 Frederick Virchanza Gotham via Std-Proposals, <
std-proposals_at_[hidden]> wrote:
> On Tue, Oct 29, 2024 at 8:48 PM Andrey Semashev wrote:
> >
> >
> > > You could replace it with:
> > >
> > > string GetCodecName(Manager *const pmanager)
> > > {
> > > return
> pmanager->GetDevice()->GetChannel(0)->GetLowPassFilter()->GetCodecName();
> > > }
> > >
> > > That's the kind of lines I was thinking along.
> >
> > The two pieces of code are not equivalent, even assuming the proposal is
> > accepted. Specifically, the second piece is missing `return {}`, and in
> > fact it's not clear what this code is supposed to do if any if the
> > pointers are null. Even if you did define some sort of behavior in this
> > case, I wouldn't describe this code as something that is easy to
> understand.
>
>
> Here's how each of those methods could be defined:
>
> Device *Manager::GetDevice(void) { if ( nullptr == this ) return
> {}; return this->pdev; }
> Channel *Device::GetChannel(void) { if ( nullptr == this ) return
> {}; return this->pchannel; }
> Filter *Channel::GetLowPassFilter(void) { if ( nullptr == this )
> return {}; return this->plow; }
> string Filter::GetCodecName(void) { if ( nullptr == this ) return
> {}; return this->codec_name; }
> What this means is that you can chain them without checking for a
> nullptr at each step, something like:
>
>
> pmanager->GetDevice()->GetChannel(0)->GetLowPassFilter()->GetCodecName();
>
> I'm not sure if this is a fantastic idea but I think it's worth looking at.
>
The decades old solution to this is
https://en.m.wikipedia.org/wiki/Null_object_pattern
std-proposals_at_[hidden]> wrote:
> On Tue, Oct 29, 2024 at 8:48 PM Andrey Semashev wrote:
> >
> >
> > > You could replace it with:
> > >
> > > string GetCodecName(Manager *const pmanager)
> > > {
> > > return
> pmanager->GetDevice()->GetChannel(0)->GetLowPassFilter()->GetCodecName();
> > > }
> > >
> > > That's the kind of lines I was thinking along.
> >
> > The two pieces of code are not equivalent, even assuming the proposal is
> > accepted. Specifically, the second piece is missing `return {}`, and in
> > fact it's not clear what this code is supposed to do if any if the
> > pointers are null. Even if you did define some sort of behavior in this
> > case, I wouldn't describe this code as something that is easy to
> understand.
>
>
> Here's how each of those methods could be defined:
>
> Device *Manager::GetDevice(void) { if ( nullptr == this ) return
> {}; return this->pdev; }
> Channel *Device::GetChannel(void) { if ( nullptr == this ) return
> {}; return this->pchannel; }
> Filter *Channel::GetLowPassFilter(void) { if ( nullptr == this )
> return {}; return this->plow; }
> string Filter::GetCodecName(void) { if ( nullptr == this ) return
> {}; return this->codec_name; }
> What this means is that you can chain them without checking for a
> nullptr at each step, something like:
>
>
> pmanager->GetDevice()->GetChannel(0)->GetLowPassFilter()->GetCodecName();
>
> I'm not sure if this is a fantastic idea but I think it's worth looking at.
>
The decades old solution to this is
https://en.m.wikipedia.org/wiki/Null_object_pattern
Received on 2024-10-29 22:42:14