Heim > Backend-Entwicklung > C++ > Wie rufe ich Funktionsargumenttypen in einer Variadic-Vorlagenklasse ab?

Wie rufe ich Funktionsargumenttypen in einer Variadic-Vorlagenklasse ab?

Mary-Kate Olsen
Freigeben: 2024-11-01 10:17:30
Original
536 Leute haben es durchsucht

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

Abrufen von Funktionsargumenttypen in einer variadischen Vorlagenklasse

Die angegebene Funktorklasse Foo bietet eine Möglichkeit, Funktionen mit beliebigen Argumentlisten aufzurufen . Allerdings stellt die Bestimmung der Argumenttypen innerhalb des Konstruktors eine Herausforderung dar.

Um dieses Problem zu lösen, können Sie die Klasse „function_traits“ wie folgt 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

Innerhalb der Klasse „Foo“ können Sie „function_traits“ verwenden So erhalten Sie Informationen zum Argumenttyp:

<code class="cpp">class Foo
{
    std::function<void(ARGS...)> m_f;
public:
    using result_type = typename function_traits<decltype(m_f)>::result_type;
    using arg0_type = typename function_traits<decltype(m_f)>::arg<0>::type;
    // ... Additional argument types as needed
};</code>
Nach dem Login kopieren

Dieser Ansatz ermöglicht es Ihnen, das Typsystem zu nutzen, um auf generische und typsichere Weise auf die Funktionsargumenttypen zuzugreifen und diese zu bearbeiten.

Das obige ist der detaillierte Inhalt vonWie rufe ich Funktionsargumenttypen in einer Variadic-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