C++中的空传播运算符

Sco*_*nes 5 c++ templates c++11

有人在C++中实现了一个空传播运算符,类似于函数式语言中使用的运算符吗?我正在考虑一些聪明的模板解决方案,可能类似于operator->的传播行为.

让我们假设我们有一个图形对象链,比如foo->bar->baz(对不起,德米特法则).假设其中任何一个都可以为null,并且应在解除引用之前进行测试.然后代码突然变得复杂得多:

if( !foo )
  return nullptr;
if( !foo->bar )
  return nullptr;
return foo->bar->baz;
Run Code Online (Sandbox Code Playgroud)

我想用某种紧凑的语法"分解"空检查,如下所示:

foo?->bar?->baz   // imaginary null-propagation syntax
Run Code Online (Sandbox Code Playgroud)

现在,当然它不必看起来那样,只是几乎紧凑.我想我们需要的是C++中的monad,启用null测试和'continuation'.避免使用宏和lambda会很棒,但这可能是不可能的.我可以想象在每一步都重载operator - >()并且如果this为null 则短路.

但这非常具有侵入性.理想的解决方案是将每个对象包装在链中.

Ric*_*ers 8

在您的设计的这个阶段,它可能是一个彻底的离开,但也许考虑使用Null对象模式.那么你根本不需要任何空检查.