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
Patricia ArquetteOriginal
2025-01-02 22:07:40557Durchsuche

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);

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!

Stellungnahme:
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