在 JavaScript 或 PHP 等动态类型语言中,我经常执行以下功能:
function getSomething(name) {
if (content_[name]) return content_[name];
return null; // doesn't exist
}
null
如果它存在或不存在,我会返回一个对象。
使用引用的 C++ 中的等价物是什么?一般有什么推荐的模式吗?我看到一些框架isNull()
为此提供了一种方法:
SomeResource SomeClass::getSomething(std::string name) {
if (content_.find(name) != content_.end()) return content_[name];
SomeResource output; // Create a "null" resource
return output;
}
然后调用者将以这种方式检查资源:
SomeResource r = obj.getSomething("something");
if (!r.isNull()) {
// OK
} else {
// NOT OK
}
然而,必须为每个类实现这种神奇的方法似乎很繁重。此外,何时应将对象的内部状态从“null”设置为“not null”似乎并不明显。
这种模式有什么替代方案吗?我已经知道可以使用指针来完成,但我想知道如何/是否可以使用引用来完成。还是我应该放弃在 C++ 中返回“null”对象并使用一些 C++ 特定的模式?任何有关正确方法的建议将不胜感激。