Variadische Template-Funktionsargumenterweiterung aus Tupeln
Betrachten Sie eine Template-Funktion mit variadischen Template-Parametern:
template<typename Tret, typename... T> Tret func(const T&... t);
Wie Können Sie func() mit einem Tupel von Werten als aufrufen? Argumente?
Moderne C-Lösung (C 17 und höher)
In C 17 bietet die Funktion std::apply() eine elegante Lösung:
std::apply(the_function, the_tuple);
Clang 3.9 Workaround
Wenn Sie Clang verwenden 3.9 können Sie stattdessen die Funktion std::experimental::apply verwenden.
Umgang mit vorlagenbasierten Funktionen
Wenn die Funktion vorlagenbasiert ist, können Sie die folgende Problemumgehung verwenden:
#include <tuple> template <typename T, typename U> void my_func(T &&t, U &&u) {} int main() { std::tuple<int, float&> my_tuple; std::apply([](auto &&... args) { my_func(args...); }, my_tuple); return 0; }
Generalisiertes Überlastungsset Aufruf
Eine vielseitigere Lösung, die Überladungssätze und Funktionsvorlagen verarbeiten kann, finden Sie in der umfassenden Erklärung unter https://blog.tartanllama.xyz/passing-overload-sets/.
Das obige ist der detaillierte Inhalt vonWie kann ich ein Tupel von Werten als Argumente an eine variadische Vorlagenfunktion in C übergeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!