Ich möchte wissen, ob das Folgende in C++ möglich ist. Ich muss eine Klasse erstellen, die als Datenelement eine std::map
speichert, mit Schlüsseln vom Typ std::string
, und Werte sind Funktionszeiger. Die Sache ist, dass ich diese Funktionszeiger in dem Sinne, variadische will, dass sie Funktionen anweisen, eine beliebige Anzahl von Argumenten akzeptieren, dh Hinweis auf Funktionen der FormWie konstruiere ich eine Klasse mit variablen Zeigerfunktionen als Mitglieder?
template<class... Args> f(Args...);
Das wichtige Bit ist, dass ich Ich möchte unterschiedliche Argumente für die verschiedenen Funktionszeiger in der Map einer bestimmten Instanz meiner Klasse haben können. Ich möchte zum Beispiel ein Objekt meiner Klasse erstellen und seine Map zwei Paare enthalten, von denen eines einer Funktion mit (double, int)
als Argumente und einem anderen (std::vector, int, int)
als Argumente entspricht. Und ich möchte in der Lage sein, dies allgemein zu machen, in dem Sinne, dass ich der Karte neue Elemente mit möglicherweise unterschiedlichen Argumentlisten hinzufügen kann (obwohl ich dies nur zur Kompilierzeit tun würde, muss ich immer noch programmieren die Klasse ohne die Typen zu kennen, da ich die neuen Elemente aus anderen Dateien/Clients hinzufügen möchte).
Was ist der beste Weg, dies zu implementieren?
Wie würden Sie Funktionen von dieser Karte aufrufen? Die meisten Lösungen würden jegliche Art von Sicherheitsfunktionen für die Kompilierungszeit löschen. Kannst du 'std :: any' benutzen, um deine Funktionszeiger zu speichern? –
Klingt wie ein Job für Typ löschen. –
Sobald Sie 'f' in einen Funktionszeiger verwandeln, ist dies eine konkrete Funktion mit einer festen Anzahl von Parametern und Typen. Sie können keine Vorlage speichern. – nwp