template<std::size_t... Is>
void unlock_(std::index_sequence<Is...>) {
iter(std::get<Is>(tuple)...);
}
Betrachten wir das obige Beispiel. Ich kann iter(std::get<Is>(tuple)...);
nicht verstehen. Ich weiß, dass ...
"Operator" erweitert. Daher sollte es auf Parameterpacks (in Sense-Argumenten) oder Template-Paramenter-Packs angewendet werden. Und ich kann mir vorstellen, was std::index_sequence<Is...>
ist. Da Is
Template-Parameterpaket ist, sollte es nur 1, 2, 3, 4, ...
(zum Beispiel) sein. In diesem Fall ist der out-Parameter spezifisch, weil er kein Typ ist. Es ist size_t
.TMP C++ und Parameterpakete
Aber hier: std::get<Is>(tuple)...);
std::get<Is>(tuple)
gibt Parameter/Template Pack nicht zurück, so kann ich nicht den Kontext der Verwendung.
P.S. Ist es möglich zu sehen, wie der Code nach Meta-Programmierung aussieht? Ähnlich wie nach der Vorverarbeitung?
Vielen Dank im Voraus.
Der gesamte Ausdruck, der die Paketvariable enthält, wird erweitert, so erhalten Sie 'std :: get <1> (Tupel), std :: get <2> (Tupel)', .... –
Die [Pack-Erweiterung] (http://de.cppreference.com/w/cpp/language/parameter_pack) Abschnitt der [cppreference Seite für Parameter Packs] (http://en.cppreference.com/w/cpp/language/parameter_pack) erklärt, wie dies funktioniert. – Andrew
Die Erweiterung des Parameterpakets ist ziemlich komplex und erweitert den gesamten Ausdruck und nicht das Argument. – SergeyA