【发布时间】:2012-05-09 09:49:47
【问题描述】:
在 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++ 特定的模式?任何有关正确方法的建议将不胜感激。
【问题讨论】:
-
“除了使用指针”是否排除智能指针?
-
返回迭代器是一种经常出现的模式。如果未找到该事物,则返回无效的迭代器。
-
你的建议
isNull()不是典型的 C++。您要解决的真正问题是什么。如果我们了解您想要做什么,也许我们可以提供更好的想法。 -
你为什么要有效地问“解决这个问题的方法是什么,除了解决它的正确方法”?为什么你不想使用指针来解决用例指针打算解决的问题?
-
编辑了您的问题以添加有关该问题的注释,让读者清楚为什么您要使用参考文献进行此操作
标签: c++ object methods null design-patterns