Retornando uma referência “NULL” em C ++?
Em linguagens dinamicamente tipadas como JavaScript ou PHP, geralmente faço funções como:
function getSomething(name) {
if (content_[name]) return content_[name];
return null; // doesn't exist
}
Devolvo um objeto, se existir ounull
se não.
Qual seria o equivalente em C ++ usando referências? Existe algum padrão recomendado em geral? Eu vi alguns quadros tendo umisNull()
método para este fim:
SomeResource SomeClass::getSomething(std::string name) {
if (content_.find(name) != content_.end()) return content_[name];
SomeResource output; // Create a "null" resource
return output;
}
Então, o chamador verificaria o recurso dessa maneira:
SomeResource r = obj.getSomething("something");
if (!r.isNull()) {
// OK
} else {
// NOT OK
}
No entanto, ter que implementar esse tipo de método mágico para cada classe parece pesado. Também não parece óbvio quando o estado interno do objeto deve ser definido de "null" para "not null".
Existe alguma alternativa a esse padrão? Eu já sei que isso pode ser feito usando ponteiros, mas eu estou querendo saber como / se isso pode ser feito com referências. Ou devo desistir de retornar objetos "null" em C ++ e usar algum padrão específico para C ++? Qualquer sugestão sobre a maneira correta de fazer isso seria apreciada.