Heim > Backend-Entwicklung > C++ > Hauptteil

Wie speichere ich Funktionen mit unterschiedlichen Signaturen in einer Karte in C?

Mary-Kate Olsen
Freigeben: 2024-11-14 15:54:02
Original
327 Leute haben es durchsucht

How to Store Functions with Different Signatures in a Map in C  ?

Funktionen mit eindeutigen Signaturen in einer Karte speichern

In C stellt das Erstellen einer Karte mit Zeichenfolgenschlüsseln und generischen Funktionen als Werte eine Herausforderung dar. Dies kann jedoch durch die Verwendung einer Kombination aus Typlöschung und einem auf Vorlagen basierenden Operator() erreicht werden.

Typlöschung ermöglicht die Speicherung verschiedener Funktionstypen in einem einzigen Container, während der auf Vorlagen basierende Operator() Zugriff darauf bietet gespeicherte Funktionen. Das folgende Codebeispiel veranschaulicht diesen Ansatz:

#include <any>
#include <functional>
#include <map>
#include <string>

template<typename Ret>
struct AnyCallable
{
    template<typename ... Args>
    Ret operator()(Args&amp;&amp; ... args) { ... }
    std::any m_any;
};

void foo(int x, int y) { ... }
void bar(std::string x, int y, int z) { ... }

int main()
{
    std::map<std::string, AnyCallable<void>> map;
    map["foo"] = &amp;foo;
    map["bar"] = &amp;bar;
    
    map["foo"](1, 2);
    map["bar"]("Hello", 1, 2);
}
Nach dem Login kopieren

In dieser Lösung fungiert die AnyCallable-Klasse als Wrapper um die gespeicherten Funktionen und stellt den vorlagenbasierten Operator() bereit. Die Funktionszeiger &foo und &bar werden in std::function-Objekte konvertiert, bevor sie im m_any-Member gespeichert werden. Wenn die gespeicherten Funktionen aufgerufen werden, werden sie in den entsprechenden Funktionstyp umgewandelt und ausgeführt.

Es ist wichtig zu beachten, dass aufgrund der Typlöschung passende Argumente an der Aufrufstelle bereitgestellt werden müssen. Darüber hinaus ist die Konstanz von Funktionsargumenten von Bedeutung, da unterschiedliche Überladungen mit der gleichen Anzahl von Argumenten, aber unterschiedlichen Qualifizierern erstellt werden können.

Das obige ist der detaillierte Inhalt vonWie speichere ich Funktionen mit unterschiedlichen Signaturen in einer Karte in C?. 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