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:
templateDurch 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.
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