在我阅读有关SafeNavigator operator introduction in C#
的文章时我想知道是否可以使用C ++编写那种运算符?例如,简单地写:
auto a = node->child()->child();
if( a != nullptr)
{ ... }
而不是像:
if( node != nullptr && node->child() != nullptr && (auto a = node->child()->child()) != nullptr)
{ ... }
答案 0 :(得分:0)
我看到两种方法:
1)首先,通过检查空实例上的调用,“ 实际上工作的非标准行为”:
class node { public: node() : child_(nullptr) { } ... node* child() { if (this == nullptr) { return nullptr; } return child_; } ... private: node *child_; };
2)其次,采用几乎相同的原则应用Null Object Pattern的“标准友好方式”:
class node { public: node() : is_null_(false), child_(nullptr) { } node(nullptr_t) : is_null_(true), child_(nullptr) { } ... node* child() { if ((is_null_) || (child_ == nullptr)) { return new node(nullptr);; } return child_; } bool operator!=(nullptr_t) { return (!is_null_); } bool operator==(nullptr_t) { return (is_null_); } ... private: bool is_null_; node *child_; };