Ich mache ein lineares genetisches Programmierungsprojekt, in dem Programme durch natürliche Evolutionsmechanismen gezüchtet und entwickelt werden. Ihre "DNA" ist im Grunde genommen ein Container (ich habe erfolgreich Arrays und Vektoren verwendet), die Funktionszeiger zu einer Reihe von verfügbaren Funktionen enthalten. Jetzt, für einfache Probleme, wie mathematische Probleme, könnte ich einen typdefinierten Funktionszeiger verwenden, der auf Funktionen zeigen könnte, die alle ein Doppel zurückgeben und alle als Parameter zwei Doppel annehmen.Wie erstellt man einen Container, der verschiedene Typen von Funktionszeigern in C++ enthält?
Leider ist das nicht sehr praktisch. Ich muss in der Lage sein, einen Container zu haben, der verschiedene Arten von Funktionszeigern haben kann, zB einen Funktionszeiger auf eine Funktion, die keine Argumente annimmt, oder eine Funktion, die ein Argument benötigt, oder eine Funktion, die etwas zurückgibt Idee) ...
Gibt es eine Möglichkeit, dies mit jeder Art von Container zu tun? Könnte ich das tun, indem ich einen Container verwende, der polymorphe Klassen enthält, die wiederum verschiedene Arten von Funktionszeigern haben? Ich hoffe, dass jemand mich zu einer Lösung führen kann, weil das Umgestalten alles was ich bis jetzt getan habe, wird schmerzhaft sein.
Angenommen, Sie haben einen Container 'c' mit vielen verschiedenen Funktionen. Wie wirst du sie anrufen? Wie werden Sie Funktionsergebnisse für die nicht-leeren Funktionen verarbeiten? –
Ich würde sie durch Iterieren durch den Container aufrufen und nacheinander die Funktion ausführen, auf die der Funktionszeiger zeigt. Ich bin mir nicht so sicher, ob das, was ich tun möchte, möglich ist. Für nicht-void-Funktionen würde ich einfach den Rückgabewert einem void-Zeiger zuweisen und versuchen, damit umzugehen (ist das überhaupt möglich?). –
Warum die Funktionszeiger speichern? Warum speichern Sie nicht einfach einen Identifikator, mit dem Sie die auszuführende Funktion auswählen können? (ZB switch (FuncId) {case MULT: ... break;}) Wie auch immer, Sie benötigen eine Methode, um die gewählte Funktion sinnvoll anzuwenden (z. B. wo geht der Rückgabewert einer Funktion?) – MatthewToday