Ho un problema che quando uso qualcosa di simile:Come restituire "non trovato" quando il valore di ritorno è di riferimento const
const MyList& my_list = getListForThisRegion(/*region ID, ...*/);
non so cosa per tornare quando viene trovato nessun valore.
Il mio problema è che mi piacerebbe avere un modo per segnalare (quando si restituisce il valore da getListForThisRegion
) "valore non trovato" al chiamante. Se dovessi restituire un puntatore, potrei restituire nullptr
, ma non so come farlo con i riferimenti. Tutto quello che posso pensare è avere un membro statico not_found
di tipo MyList
e restituire un riferimento ad esso, ma sembra brutto.
E sì, non posso restituire il valore perché le liste sono "grasse" e spesso utilizzate.
MODIFICA: tonnellate di grandi risposte, ma l'eccezione non è una soluzione accettabile in quanto il numero di volte in cui viene generato è elevato (la percentuale nbNotFound/nbCalls
è alta).
EDIT2: per quanto riguarda boost :: opzionale - quanto è complicato padroneggiare? Voglio dire richiede qualche conoscenza non ovvia (non ovvio = qualcosa che non è semplicemente conoscendo la sintassi)?
lanciare un'eccezione può essere una buona opzione. – BigMike
potresti anche voler dare un'occhiata a 'boost :: optional' – Akanksh
Un riferimento deve fare riferimento a un oggetto, in modo da lanciare un'eccezione o non utilizzare un riferimento. 'boost :: optional' è un'ottima scelta, ma potrebbe essere eccessivo; basta usare un puntatore. – GManNickG