2015-04-29 9 views
23

C'è un modo per passare auto come argomento ad un'altra funzione?C'è un modo per passare auto come argomento in C++?

int function(auto data) 
{ 
    //DOES something 
} 
+3

Dipende da ciò che ci si aspetta che sia in grado di fare. Cosa ti serve che un modello di funzione non offra? – Quentin

+0

Questa è un'idea orribile. Il tipo di argomento non è solo per te, ma anche per gli altri per sapere quali tipi vogliono la tua funzione. Basta prendere 3 secondi e scrivere il tipo, non essere così pigro (o utilizzare un modello se il tipo non è stato risolto). – Synxis

+0

Sì, con C++ 1z Concepts, puoi farlo :) – Navin

risposta

32

Se si vuole che a dire che è possibile passare qualsiasi tipo per la funzione, renderlo un modello:

template <typename T> int function(T data); 

C'è una proposta per C++ 17 per consentire la sintassi che hai usato (come già fa C++ 14 per lambda generici), ma non è ancora lo standard.

+1

Mi chiedo: è la stessa cosa? Cioè, per ogni 'T' ci sarà una' funzione 'mentre per' auto' solo una, come la deduzione che cambia. O forse mi sbaglio? – edmz

+3

@black: è solo un modo più breve di scrivere la stessa cosa. Una funzione diversa verrà istanziata per ogni tipo di parametro dedotto per 'auto', proprio come sarebbe per un parametro template specificato. –

+1

Ho pensato che i parametri del modello implicito dovevano essere vincolati dai concetti ... i concetti sono ora completamente morti, o è "auto" usato per argomenti non vincolati e (un giorno) concetti per quelli vincolati? –

17

I modelli sono il modo in cui si esegue questa operazione con le normali funzioni:

template <typename T> 
int function(T data) 
{ 
    //DOES something 
} 

In alternativa, è possibile utilizzare un lambda:

auto function = [] (auto data) { /*DOES something*/ }; 
+0

È valido C++ 11? Questo è C++ 14 giusto? – Alex

+0

I lambda generici sono una caratteristica di C++ 14. – TartanLlama

Problemi correlati