Disclaimer: Ich bin ein absoluter Neuling mit C, aber ich habe damit gespielt, einige Features von Klassen nachzuahmen. Ok, Ich weiß, wenn ich diesen Weg gehen will, sollte ich C ++ lernen, aber bedenke folgendes: .
Schreiner, in dem Buch Objektorientierte Programmierung mit ANSI-C schlägt eine Möglichkeit vor, Zeiger zu verwenden, um Objektorientierungsmerkmale in C zu erhalten. Ich muss zugeben, dass ich nur das Buch überflogen habe, aber ich mag seinen Ansatz nicht zu sehr. Im Grunde verwendet er Zeiger auf Funktionen, um das zu arrangieren
%Vor%führt tatsächlich zum Aufruf
%Vor% wobei foo.methods
eine Struktur ist, die Zeiger auf Funktionen enthält. Was ich bei diesem Ansatz nicht mag ist, dass man die globale Funktion foo
auf jeden Fall haben muss; Das heißt, dass Methoden nicht von der Klasse, in der sie leben, Namespaced sind. Mein Gefühl ist, dass dies bald zu Unordnung führen wird: denke an die beiden Objekte foo
und bar
, beide mit einer Methode func
, aber mit einer anderen Anzahl von Parametern .
Also habe ich versucht, etwas passender zu meinem Geschmack zu bekommen. Ein erster Versuch ist der folgende (Ich lasse die Deklarationen aus Gründen der Kürze weg)
%Vor%Das ist unpraktisch, aber irgendwie funktioniert es. Was ich jedoch nicht mag, ist, dass Sie das Objekt selbst als erstes Argument explizit hinzufügen müssen. Mit etwas Präprozessorarbeit kann ich ein bisschen besser machen:
%Vor% Das ist soweit ich kann. Das Problem hierbei ist, dass es bei Methoden mit Argumenten nicht funktioniert, da Präprozessor-Makros keine variable Anzahl von Argumenten annehmen können. Natürlich kann man Makros _0
, _1
usw. entsprechend der Anzahl der Argumente definieren (bis man müde wird), aber das ist kaum ein guter Ansatz.
Gibt es eine Möglichkeit, dies zu verbessern und C eine objektorientierte Syntax zu verwenden?
Ich sollte hinzufügen, dass Schreiner tatsächlich viel mehr tut als das, was ich in seinem Buch gesagt habe, aber ich denke, die grundlegende Konstruktion ändert sich nicht.
Verschiedene Frameworks existieren bereits. Siehe zum Beispiel Ссылка
Ein Buch (in PDF-Form), das erklärt, wie es geht, ist objektorientierte Programmierung in ANSI C Es ist alt (1993), aber enthält noch einige gültige Ideen und Tipps, IMHO.
Haben Sie Google Go angeschaut? Es ist im Grunde genommen ein modernisiertes C, bei dem die Dinge in der von Ihnen vorgeschlagenen Art und Weise erledigt werden. Es hat Parameterpolymorphismen. Du musst das also nicht tun:
%Vor%In Go kann es so gemacht werden:
%Vor%In Go Foo und Bar wären auch Strukturen. Sie befinden sich also im Grunde auf dem gleichen Weg wie die Go-Sprachdesigner.
Einen Überblick über Go finden Sie unter Ссылка Dies ist die Hauptsprache von Go: Ссылка