E 'da un po' che sto facendo C++ ma non ho familiarità con i modelli.Iterating on a tuple ... again
Recentemente, ho provato a scrivere una classe che avvolge un std::vector<std::tuple<Types...>>
. Questa classe deve avere funzioni membro e ho davvero bisogno di essere in grado di iterare sopra la tupla. Infatti, se sono in grado di stampare ogni elemento di una tupla (nell'ordine), sarei in grado di fare tutto ciò di cui ho bisogno.
Ho trovato una soluzione utilizzando un cast, ma non ne sono molto sicuro dato che si basa su un cast che non mi piace molto (inoltre, quando provo a usare static_cast
, non viene compilato più).
La mia domanda è, è il seguente codice corretto, portatile, è un hack e dovrei trovare un altro modo per farlo rispetto a utilizzare questo cast? Inoltre, questo cast è probabilmente un cast runtime giusto? C'è un modo per fare ciò che voglio senza questo?
std::ostream& operator<<(std::ostream& out, std::tuple<> const& tuple)
{
return out; // Nothing to do here
}
template<typename First, typename... Types>
std::ostream& operator<<(std::ostream& out, std::tuple<First, Types...> const& tuple)
{
out << std::get<0>(tuple) << " ";
// The cast that I don't like
return out << (std::tuple<Types...>&) tuple;
}
int main()
{
auto tuple = std::make_tuple(1, 2.3, "Hello");
std::cout << tuple << std::endl;
return 0;
}
Grazie in anticipo per le vostre risposte.
Quella trasmissione sembra un 'reinterpret_cast'. Quindi no, non va bene. – 0x499602D2
Questo anche [produce un segfault] (http://coliru.stacked-crooked.com/a/9f96f1e786b070f1) quando si usa clang ++ & libC++ – dyp
@dyp Questo è esattamente quello che volevo sapere, grazie! – tforgione