Vor einiger Zeit wurde eine Lösung zum Ausdrucken von std :: tuple gepostet: here. Zum größten Teil verstehe ich, was passiert. Ich habe jedoch Probleme zu verstehen, was in der print_tuple-Funktion passiert.Anatomie des hübschen Drucktupels
template<class Ch, class Tr, class Tuple, std::size_t... Is>
void print_tuple(std::basic_ostream<Ch,Tr>& os, Tuple const& t, seq<Is...>){
using swallow = int[];
(void)swallow{0, (void(os << (Is == 0? "" : ", ") << std::get<Is>(t)), 0)...};
}
Ich verstehe nicht, was im Körper dieser Funktion passiert. Soweit ich das beurteilen kann, hat es mit dem Auspacken zu tun Is
. Ich bekomme, dass die Bedingung, Is == 0
überprüft, ob wir an der Spitze Element sind.
Also, was ist los?
Der Code konstruiert (und verwirft dann) ein 'int []' Array aus einer Initialisierungsliste, in der jedes Element 0 ist, aber ein Element des Tupels als Nebeneffekt (über Kommaoperator) ausgegeben wird. Die Verwendung der Initialisierungsliste dient nur dazu, in einen Kontext zu gelangen, in dem die Erweiterung des Pakets funktionieren würde. –
Ah! Also ist das 'swallow {...}' Konstrukt eine Initialisierungsliste für int []. Ich habe das auf den ersten Blick nicht verstanden. – sguzman