В динамически типизированных языках, таких как JavaScript или PHP, я часто выполняю такие функции, как:
function getSomething(name) {
if (content_[name]) return content_[name];
return null; // doesn't exist
}
Я возвращаю объект, если он существует, или null
, если нет.
Каким будет эквивалент в С++ с использованием ссылок? Есть ли рекомендованная модель в целом? Я видел некоторые рамки, имеющие метод 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".
Есть ли альтернатива этому шаблону? Я уже знаю, что это можно сделать с помощью указателей, но мне интересно, как это сделать, если это можно сделать со ссылками. Или я должен отказаться от возвращения "нулевых" объектов в С++ и использовать некоторый С++-специфический шаблон? Любое предложение о правильном способе сделать это будет оценено.