Heim > Backend-Entwicklung > C++ > Hauptteil

Wie rufe ich Argumenttypen eines Funktionszeigers in einer variadischen Vorlagenklasse ab?

Mary-Kate Olsen
Freigeben: 2024-10-31 08:19:30
Original
837 Leute haben es durchsucht

 How to Retrieve Argument Types of a Function Pointer in a Variadic Template Class?

Abrufen von Argumenttypen eines Funktionszeigers in einer variadischen Vorlagenklasse

In der vorherigen Ausgabe wurde eine generische Funktorklasse zur Verarbeitung von Funktionen erstellt mit beliebigen Argumentlisten. Das vorliegende Problem betrifft den Zugriff auf die Argumenttypen des Funktionszeigers innerhalb des Konstruktors dieser Klasse.

Um dieses Problem zu beheben, können Sie die Klassenvorlage „function_traits“ verwenden:

<code class="cpp">template<typename T>
struct function_traits;

template<typename R, typename ...Args>
struct function_traits<std::function<R(Args...)>>
{
    static const size_t nargs = sizeof...(Args);

    typedef R result_type;

    template <size_t i>
    struct arg
    {
        typedef typename std::tuple_element<i, std::tuple<Args...>>::type type;
    };
};</code>
Nach dem Login kopieren

Diese Klasse bietet die folgende Funktionalität:

  • Extrahieren der Anzahl von Argumenten:Die Nargs-Konstante stellt die Anzahl der von der Funktion übernommenen Argumente dar.
  • Ermitteln der Rückgabetyp: Die Typdefinition result_type identifiziert den Rückgabetyp.
  • Bestimmen einzelner Argumenttypen: Die arg-Vorlagenstruktur stellt die spezifischen Typen jedes Arguments bereit.

Zum Beispiel:

<code class="cpp">struct R{};
struct A{};
struct B{};

typedef std::function<R(A,B)> fun;

std::cout << std::is_same<R, function_traits<fun>::result_type>::value << std::endl;
std::cout << std::is_same<A, function_traits<fun>::arg<0>::type>::value << std::endl;
std::cout << std::is_same<B, function_traits<fun>::arg<1>::type>::value << std::endl;</code>
Nach dem Login kopieren

Ausgabe:

1
1
1
Nach dem Login kopieren

Dieses Beispiel zeigt, wie function_traits verwendet wird, um die Argumenttypen im Konstruktor einer variadischen Vorlagenklasse abzurufen.

Das obige ist der detaillierte Inhalt vonWie rufe ich Argumenttypen eines Funktionszeigers in einer variadischen Vorlagenklasse ab?. 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
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!