que tiene una estructura de C++ y un método:método de C++ que puede/no puede devolver una estructura
struct Account
{
unsigned int id;
string username;
...
};
Account GetAccountById(unsigned int id) const { }
que puede devolver una estructura cuenta si existe la cuenta, pero qué hacer si no hay cuenta?
Me idea de tener:
- Una "es válida" bandera en la estructura (por lo que una vacía puede ser devuelto, con ese conjunto en false)
- Un adicional "es válida" puntero (const cadena & id, int * is_ok) que se establece si la salida es válida
- Devolviendo una Cuenta * en su lugar, y devolviendo un puntero a una estructura, o NULO si no existe?
¿Existe alguna forma de hacerlo?
+1 me gané por unos segundos. :) – casablanca
Prefiero la respuesta de Juraj a continuación, porque codifica la capacidad de nulidad en el tipo, lo que aumenta la seguridad del tipo del código. Especialmente, usando su método, uno puede olvidarse accidentalmente de verificar la devolución, mientras que si el retorno es el valor, entonces tiene que usarlo :) –
Creo que mi principal problema aquí es nombrar la función. GetX() para mí siempre debe devolver X (si no está allí, es una excepción). Si existe la posibilidad de que X no exista, entonces debe haber una función findX() que devuelva un iterador (o un objeto similar al iterador). Si no se puede encontrar el objeto, esto puede determinarse a partir del iterador si se encuentra que el iterador se puede convertir en una referencia del objeto.Pasar los parámetros de salida no es intuitivo y requiere que pueda crear un objeto inválido/vacío (para pasarlo y llenarlo). Los objetos inválidos/vacíos son propensos a errores. –