Durante le mie avventure con il progetto mi sono reso conto che non posso usare il vantaggio della nuova parola chiave auto C++ 11 se voglio inizializzare il parametro a seconda della condizione.C++ auto con più scelte
Fondamentalmente ho avuto un frammento di codice come questo:
auto foo = bar::getfoo();
che doveva essere il cambiamento a:
FOO foo
if(cond){
foo = bar::getfoo();
} else {
foo = baz::getotherfoo();
}
Ma poi ho bisogno di dichiarare la foo con il tipo (come il compilatore può So che userò lo stesso tipo di ritorno Mi stavo chiedendo se c'è un modo di usare la parola chiave auto in questo caso .. L'altra soluzione che ho trovato utilizza l'operatore?: con tale codice:
auto foo = cond ? bar::getfoo() : baz::getotherfoo();
Ma se ci sono più di due funzioni tra cui scegliere non desidero concatenare il? : operatori. Mi chiedo se ci sia qualche schema valido da utilizzare in questo caso.
È un peccato che tu sia limitato a C++ 11. In C++ 14, utilizzare una funzione o lambda con un tipo di ritorno dedotto. –
@ mike quasi ogni compilatore C++ 11 ha supportato la deduzione avanzata del tipo restituito su lambdas praticamente fuori dal gate. – Yakk
La domanda è formulata in modo un po 'errato. Non ci sono scelte multiple. La scelta è una, perché tutti i "percorsi" valutano lo stesso tipo. Tuttavia OP vuole tipo "posticiparla" dopo la dichiarazione di dichiarazione delle variabili. Per scelte multiple sono necessari 'boost :: any' o qualcosa del genere. – luk32