2014-06-07 15 views
8

Vale a dire:Qual è il modo più semplice per creare una variabile locale con lo stesso tipo di un argomento dedotto?

[](auto const& foo) { 
    ??? bar; // should be same base type as foo, minus const& 
} 

Finora, sto usando:

typename std::remove_const<typename std::remove_reference<decltype(foo)>::type>::type combination 

ma sono davvero sperando theres un'alternativa più facile!

+1

Per quanto ho letto, ero semantica di deduzione di tipo 'auto', ma in un punto in cui ho bisogno di usare' decltype' dato che non sto assegnando un'espressione. Hanno introdotto 'decltype (auto) foo = bar' per il problema inverso, ma ora voglio' decltype (bar) foo; ';) – mmocny

risposta

10

std::decay<decltype(whatever)>::type o decay_t se la libreria std è stata aggiornata con esso.

Emula vari tipi di decadimenti delle funzioni. Gestisce se il tuo arg era un riferimento alla funzione. Su reference-to-array, produce anche un puntatore, che è meno ideale.

Se si desidera gestirli in modo diverso, è necessario eseguire il rollover.

+0

+1 non sapeva' decadere' rimosse riferimento – Praetorian

+0

Fantastico! Sì, ha il supporto per 'std :: decay_t' quindi ancora meglio. – mmocny