template <class T, class Tuple>
struct Index;
template <class T, class... Types>
struct Index<T, std::tuple<T, Types...>> {
static const std::size_t value = 0;
};
template <class T, class U, class... Types>
struct Index<T, std::tuple<U, Types...>> {
static const std::size_t value = 1 + Index<T, std::tuple<Types...>>::value;
};
See it live at Coliru.
Questa implementazione restituisce l'indice della prima occorrenza di un determinato tipo. Chiedendo l'indice di un tipo che non è nella tupla, si ottiene un errore di compilazione (e abbastanza brutto).
Cosa succede se si ha 'std :: tuple' e si chiede 'int'? Anche perché ne hai bisogno? –
Borgleader
Suppongo che la tupla abbia diversi tipi di elementi. In assenza di tale ipotesi, ottenere una corrispondenza va bene. Lo uso per implementare una efficiente fabbrica astratta con una tupla di classi derivate da una classe base. – user1899020
Stai cercando un ambiente specifico o solo un C++ generale? – css