Intendo perché esiste std::make_tuple
? So che ci sono situazioni in cui la funzione riduce la quantità di caratteri che devi digitare perché puoi evitare i parametri del modello. Ma è l'unica ragione? Che cosa rende speciale la funzione std::tuple
mentre altri modelli di classe non hanno tale funzione? È solo perché è possibile utilizzare std::tuple
più spesso in tali situazioni?Qual è la ragione per `std :: make_tuple`?
Ecco due esempi in cui std::make_tuple
riduce la quantità di personaggi:
// Avoiding template parameters in definition of variable.
// Consider that template parameters can be very long sometimes.
std::tuple<int, double> t(0, 0.0); // without std::make_tuple
auto t = std::make_tuple(0, 0.0); // with std::make_tuple
// Avoiding template parameters at construction.
f(std::tuple<int, double>(0, 0.0)); // without std::make_tuple
f(std::make_tuple(0, 0.0)); // with std::make_tuple
Ma, come scritto sopra, non si dispone di una funzione come questa per molti altri modelli di classe.
Esistono varie funzioni simili, ma il confronto diretto più ovvio è ['std :: make_pair'] (http://en.cppreference.com/w/cpp/utility/pair/make_pair). Penso che una regola empirica potrebbe essere che esistono se si volesse costruire questi oggetti semplicemente come parte di un'altra espressione, per chiamare una funzione, ecc. – BoBTFish
Per quali altre classi ti piacerebbe avere una funzione 'make_ *'? Stiamo già ottenendo make_shared, make_unique, ecc. –
L'unica differenza è la deduzione di tipo. Ma la deduzione di tipo può essere utile, ecco perché. –