Ho una funzione membro che assomiglia a:
Point find_the_special_point(Image img);
Tuttavia, questa funzione potrebbe non riuscire a trovare il punto (ad esempio img
non contiene affatto un punto speciale ).
Qual è il modo giusto per far ritornare la funzione in qualche modo che il punto non è stato trovato?
Ho pensato ad alcune soluzioni ma non sono sicuro quale sia il migliore o se esiste un approccio migliore:
1. Eccezione di lancio se il punto non viene trovato:
Penso che sia semplicemente stupido perché le eccezioni non significano controllare il flusso. Inoltre, non trovare un punto è un comportamento previsto non un'eccezione.
2. Modificare la dichiarazione in:
Bool find_the_special_point(Image img , Point& pnt);
Anche se sembra corretto, ritengo (non sicuro) che non sia così bello restituire l'output effettivo tramite argomenti.
3. Disporre il motto:
struct find_the_special_point_result{
bool is found;
Point special_point;
};
find_the_special_point_result find_the_special_point(Image img);
Sembra una buona soluzione. Tuttavia, sospetto che sia un po 'eccessivo.
4. Restituito puntatore invece:
std::shared_ptr<Point> find_the_special_point(Image img);
e se non viene trovato restituisce nullptr
. Tuttavia, penso che l'allocazione dinamica non sia stata fatta per questo caso. È come utilizzare lo strumento sbagliato per raggiungere un altro obiettivo.
Qual è il modo in cui la convenzione risolve questo problema?