Heim > Backend-Entwicklung > C++ > Wie kann ich ein Tupel von Werten als Argumente an eine variadische Vorlagenfunktion in C übergeben?

Wie kann ich ein Tupel von Werten als Argumente an eine variadische Vorlagenfunktion in C übergeben?

Patricia Arquette
Freigeben: 2025-01-02 22:07:40
Original
542 Leute haben es durchsucht

How Can I Pass a Tuple of Values as Arguments to a Variadic Template Function in C  ?

Variadische Template-Funktionsargumenterweiterung aus Tupeln

Betrachten Sie eine Template-Funktion mit variadischen Template-Parametern:

template<typename Tret, typename... T> Tret func(const T&... t);
Nach dem Login kopieren

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);
Nach dem Login kopieren

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;
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage