Wie kann man die späte Bindung in C-Sprache erreichen?
-
21-09-2019 - |
Frage
Wie kann man spät erreichen Bindung in C-Sprache?
Lösung
Späte Bindung ist nicht wirklich eine Funktion der C-Sprache selbst, etwas mehr, dass Ihre Ausführungsumgebung für Sie bereitstellt.
wird bieten viele Systeme abgegrenzt als Merkmal des Linkers / loader Bindung und Sie können auch explizite Anrufe wie dlopen
verwenden (eine gemeinsame Bibliothek zu öffnen) und dlsym
(um die Adresse eines Symbols zu erhalten innerhalb dieser Bibliothek, so dass Sie Zugriff es oder es nennen).
Die einzige halb tragbare Art und Weise späte Bindung mit dem C-Standard zu bekommen wäre, eine Betrügerei mit system()
zu verwenden und auch das zumindest teilweise Umsetzung spezifisch.
Wenn Sie nicht so viel reden über latente Bindung, sondern Polymorphismus, können Sie diesen Effekt mit Funktionszeigern erreichen. Im Grunde erstellen Sie eine struct
die alle Daten für einen Typ mit Funktionszeiger zum Lokalisieren der Methoden für diese Art hat. Dann wird in der "Konstruktor" (typischerweise eine init () Funktion), Sie legen Sie die Funktionszeiger auf die entsprechenden Funktionen für diese Art.
Sie müssen noch alle den Code selbst schließen, wenn Sie ihn nicht verwenden, aber es is möglich Polymorphismus erhalten auf diese Weise.
Andere Tipps
Symbol in C-Bindung immer bei der Kompilierung erfolgt, nie Laufzeit.
In der Bibliothek Bindung oder dynamische Verknüpfung, wie es genannt wird, wird über dlopen()
und dlsym()
auf * nichts, und LoadLibrary()
und GetProcAddress()
unter Windows.
Verwenden Sie Objective-C oder Lua. Beide sind spät gebundene Sprachen, die mit C leicht Schnittstelle können.
Natürlich können Sie Ihr eigenes Name Auflösungsschema implementieren, aber warum neu erfinden das Rad?
Leider haben Sie nicht ein Betriebssystem angeben. Für Unix können Sie gemeinsam genutzte Bibliotheken verwenden, oder ein konfigurierbares (Plugin) Modulstruktur erstellen. Weitere Einzelheiten können Sie den Quellcode eines Apache 1.3 Webserver nützlich finden. http://httpd.apache.org/download.cgi
cppdev scheint die zu sein und nur die Stelle mit seiner / ihrer Bemerkung zu schlagen. Bitte haben Sie einen Blick auf die Definition selbst . In wenigen Worten:
Späte Bindung oder dynamische Bindung, ist ein Computer-Programmiermechanismus in dem genannten Verfahren wird auf ein Objekt mit Namen nachgeschlagen wird zur Laufzeit.
Alle anderen Antworten nur den Hauptpunkt vermissen, die „nachschlagen nach Name“ ist.
Die benötigte Lösung wäre sehr ähnlich zu einer Lookup-Tabelle von Zeigern auf Funktionen zusammen mit einer Funktion oder zwei die richtigen nach Namen (oder sogar durch Unterschrift) zu wählen. Wir nennen es eine "Hash-Tabelle".