假设我有一个可能未正确初始化的对象,但它不仅仅是一个指向对象的空指针;它是一个空指针。它是一个具有空或未初始化成员的对象。但我想以可读的方式检查它,就像它是一个指针一样:
if (Object) use(Object);
例如,Object 可能有一个 int
字段,如果该字段为 0,则被视为未初始化。然后,我可以使 ! 重载。像这样的运算符:
bool operator!() const {return intField == 0;}
我可以像这样使用它:
if (! Object) initialize (Object);
问题是,如果我想测试相反的条件(非空),我不能这样做:
if (Object)...
我只发现尴尬的可能性:
if (! (! Object))... // awful
if (Object.notNull()) // not so bad
最接近我愿望的一个令人困惑:
bool operator()() {return intField != 0;}
if (Object())... // it looks a lot like an argument-less constructor
据我所知,没有 bool 返回空运算符(例如 bool operator() {...}
)或任何其他可以实现此目的的技巧或习惯用法。
除了 notNull()
方法之外,还有什么可读的解决方案吗?谢谢。
最佳答案
您可以提供类型转换运算符,以允许转换为 bool
:
explicit operator bool() const {return intField != 0;}
这允许它在 bool 上下文中使用,例如 if
条件。 显式
是可选的,但这是防止可能混淆的数字类型转换的好主意。
另一种方法是使用 Boost.Optional或类似的,使任何类型可为空。
关于c++ - 像测试指针一样测试 C++ 对象的有效性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28349587/