Retornando uma referência “NULL” em C ++?
Em linguagens dinamicamente tipadas como JavaScript ou PHP, geralmente faço funções como:
<code>function getSomething(name) { if (content_[name]) return content_[name]; return null; // doesn't exist } </code>
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:
<code>SomeResource SomeClass::getSomething(std::string name) { if (content_.find(name) != content_.end()) return content_[name]; SomeResource output; // Create a "null" resource return output; } </code>
Então, o chamador verificaria o recurso dessa maneira:
<code>SomeResource r = obj.getSomething("something"); if (!r.isNull()) { // OK } else { // NOT OK } </code>
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.