【发布时间】:2017-12-22 07:36:24
【问题描述】:
在现代 C++ 中,有没有办法进行安全导航?
例如,而不是做...
if (p && p->q && p->q->r)
p->q->r->DoSomething();
...通过使用某种短路智能指针,或某种其他类型的利用运算符重载的语法,或标准 C++ 库或 Boost 中的某些东西,具有简洁的语法。
p?->q?->r?->DoSomething(); // C++ pseudo-code.
上下文尤其是 C++17。
【问题讨论】:
-
据我所知,并希望它不会出现。这种 a->b->c->d 编码风格会导致大问题、紧密耦合以及无法将代码片段彼此分离。
-
这种情况下安全指针应该做什么?
-
你可以重载
operator->,但问题是它应该返回什么。 -
@Bogolt - 我同意所有提到的“大问题”方面。不幸的是,我的情况是使用一个非常大且非常古老的代码库,它普遍使用第一个示例作为模式。除了那些错过的地方。我有大问题的第一手经验。给定时间,代码库应该被更好地封装并采用“告诉,不要问”的原则。但那是在未来。
-
@manni66 - “安全导航操作员”应该短路并且不能操作。