¿Devolviendo una "referencia NULA" en C ++?
En lenguajes de tipo dinámico como JavaScript o PHP, a menudo hago funciones como:
<code>function getSomething(name) { if (content_[name]) return content_[name]; return null; // doesn't exist } </code>
Devuelvo un objeto si existe onull
si no.
¿Cuál sería el equivalente en C ++ usando referencias? ¿Hay algún patrón recomendado en general? Vi algunos marcos teniendo unaisNull()
Método para este fin:
<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>
Entonces la persona que llama verificará el recurso de esa manera:
<code>SomeResource r = obj.getSomething("something"); if (!r.isNull()) { // OK } else { // NOT OK } </code>
Sin embargo, tener que implementar este tipo de método mágico para cada clase parece pesado. Además, no parece obvio cuando el estado interno del objeto debe establecerse desde "nulo" a "no nulo".
¿Hay alguna alternativa a este patrón? Ya sé que se puede hacer usando punteros, pero me pregunto cómo / si se puede hacer con referencias. ¿O debería renunciar a devolver objetos "nulos" en C ++ y utilizar algún patrón específico de C ++? Cualquier sugerencia sobre la forma correcta de hacerlo sería apreciada.