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>
Diese Klasse bietet die folgende Funktionalität:
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>
Ausgabe:
1 1 1
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!