2014-09-18 28 views
5

C'è un modo per dedurre il tipo di una lista per evitare di dover passare il tipo di argomento che dovrebbe essere la lista, basta dedurlo dal primo tipo di elemento.Deduce Argument Type For Variadic Template?

template<typename T, T... Args> 
struct Calc 
{ 
    // do stuff with Args 
}; 

// Usage: 
Calc<int, 1, 2, 3>::value; 

typename<T... Args> Calc { }; // error T undefined 

// Desired: 
Calc<1, 2, 3>::value;   // auto deduced T = int 
Calc<1.0f, 2.0f, 3.0f>::value; // auto deduced T = float 

C'è un modo per ottenere il comportamento desiderato o devo includere il tipo come parametro?

+0

Si potrebbe provare a utilizzare dynamic_cast <> - se si sa quali sono i tipi possibili, cioè. – RockOnRockOut

+4

No, questo tipo di detrazione non è ancora possibile, sebbene sia stato proposto prima: http://open-std.org/JTC1/SC22/WG21/docs/papers/2013/n3601.html – Brian

+1

Dichiarazione di valore come std :: common_type potrebbe funzionare? – mattnewport

risposta

0

Per quanto ne so non è possibile fino a C++ 14. Tuttavia C++ 17 introduce Guide di deduzione definite dall'utente descritte in modo estensivo qui: class template argument deduction

+0

Le guide alla deduzione non saranno d'aiuto, ma [i parametri del modello auto' (modello di auto') (http://en.cppreference.com/w/cpp/language/template_parameters#Non-type_template_parameter) (anche in C++ 17) lo faranno. – Quentin

Problemi correlati