Heim >Backend-Entwicklung >C++ >Wie kann ich Tupel in variadische Template-Funktionsargumente in C erweitern?
Erweitern von Tupeln in variadische Template-Funktionsargumente
In C 17 und höher bietet die Funktion std::apply eine einfache Lösung für dieses Problem. Es benötigt ein aufrufbares Objekt und ein Tupel als Argumente und erweitert das Tupel im Wesentlichen in einzelne Argumente für die Funktion:
#include <tuple> template<typename Tret, typename... T> Tret func(const T&... t); int main() { std::tuple<int, float> my_tuple; auto result = std::apply(func<int, int, float>, my_tuple); return 0; }
In Clang-Versionen ab 3.9 std::experimental::apply kann für ähnliche Funktionen verwendet werden.
Verwaltung der Vorlagenfunktion Argumente
Wenn die Vorlagenfunktion verschiedene Vorlagenargumente akzeptiert, kann eine Problemumgehung angewendet werden:
#include <tuple> template<typename T> void my_func(T&& t) {} int main() { std::tuple<int, float> my_tuple; std::apply([](auto&&... args) { my_func(args...); }, my_tuple); return 0; }
Dieser Ansatz ermöglicht Vorlagenfunktionen, Tupelargumente zu akzeptieren, wenn auch mit etwas weniger Typsicherheit . Eine allgemeinere und robustere Lösung finden Sie in dieser Ressource: https://blog.tartanllama.xyz/passing-overload-sets/.
Das obige ist der detaillierte Inhalt vonWie kann ich Tupel in variadische Template-Funktionsargumente in C erweitern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!