Part 1: print std::array with std::integer_sequence
Part 2: convert tuple to parameter pack
Part 3: print std::array with std::apply and fold
Part 4: fold over std::tuple und erzeugten Assembler Code
Part 5: fold over std::tuple of std::vector of Types ...
Part 6: apply generic lambda to tuple
Part 7: Play with std::tuple and std::apply
#include <tuple>
#include <string_view>
#include <iostream>
void print(int i, std::string_view str, double x) {
std::cout << i << " " << str << " " << x << "\n";
}
int main() {
std::tuple tp {1, "abc", 3.1};
// Ein Tuple in seine Einzelteile zerlegten durch eine Funktion die genau
// die Tuple Elemente als Parameter hat
std::apply(print, tp);
// Ein Tuple in sein erstes Element und den Rest zerlergen.
// Der Rest ist ne variadic argument list
// Die Funktion print2 ist absichtlich ein Lambda,
// da das sonst mit dem auto Argument Typ nicht funktioniert.
// Will man print2 als freie Funktion haben, muss man sie als template schreiben.
auto print2 = [](const int i, const auto&... restArgs) {
std::cout << i << " Anzahl Restargumente: " << sizeof...(restArgs) << "\n";
};
std::apply(print2, tp);
}
1 abc 3.1
1 Anzahl Restargumente: 2