Frage

Wie kann man spät erreichen Bindung in C-Sprache?

War es hilfreich?

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.

getan
  

Wie kann man erreichen, spät in der Sprache C-Bindung?

Die nächste wäre durch die dynamischen Laden von Bibliothek (DLL) wie mit dlopen & dlsym auf Linux. Ansonsten ist es nicht direkt in C zur Verfügung.

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".

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top