有人在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 则短路.
但这非常具有侵入性.理想的解决方案是将每个对象包装在链中.