„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie kann ich auf die Argumenttypen eines Funktionszeigers innerhalb einer variadischen Vorlagenklasse zugreifen?

Wie kann ich auf die Argumenttypen eines Funktionszeigers innerhalb einer variadischen Vorlagenklasse zugreifen?

Veröffentlicht am 21.11.2024
Durchsuche:191

How can I access the argument types of a function pointer within a variadic template class?

Zugriff auf Funktionszeiger-Argumenttypen in der Variadic-Vorlagenklasse

Dieses Problem ergibt sich aus einer früheren Abfrage bezüglich der Erstellung eines generischen Funktors für Funktionen mit beliebigen Argumenten Listen. Die angegebene Funktorklasse Foo ermöglicht den Aufruf eines Funktionszeigers mit einer beliebigen Anzahl von Argumenten. Die Aufgabe besteht nun jedoch darin, die Argumenttypen aus dem Funktionszeiger innerhalb des Foo-Konstruktors zu extrahieren.

Bei der Definition der Foo-Klasse werden die Argumenttypen als ARGS... in der Funktionszeigerdeklaration des Konstruktors gekapselt. Während die Werte der Argumente zur Konstruktionszeit nicht verfügbar sind, sind ihre Typen innerhalb des Funktionszeigers selbst zugänglich.

Um diese Argumenttypen aufzudecken, kann man die Vorlage „function_traits class:

template 
struct function_traits;  

template>
{
    // Number of arguments
    static const size_t nargs = sizeof...(Args);

    // Return type
    typedef R result_type;

    // Argument types at specified index
    template <size_t i>
    struct arg
    {
        typedef typename std::tuple_element<i, std::tuple<Args...>>::type type;
    };
};

Im Foo-Konstruktor kann man mit function_traits wie folgt auf diese Argumenttypen zugreifen:

template

Durch die Verwendung von function_traits können die Argumenttypen extrahiert und innerhalb der Foo-Klasse genutzt werden, wodurch anspruchsvolle Operationen basierend auf der Signatur der Funktion ermöglicht werden.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3