Objektorientierte C-Programme, Preprocessor
-
Hallo!
Habe ein etwas spezielles Anliegen und hoffe, dass einer von euch vielleicht eine Lösung/einen Lösungshinweis dazu hat.
Man kann auch in C objektorientiert programmieren (ja, in C++ wärs einfacher, aber das ist hier leider keine Option). Leider bietet C diese Funktionalität nicht von Haus aus an, daher muss man sich das Ganze selbst zusammenbauen (Beispiel für Interessierte: unten).
Damit ich das nicht für jedes Programm von Hand machen muss, will ich ein Perlprogramm haben, dass die entsprechenden C-Sourcefiles als Argument geliefert bekommt und die 'Übersetzung' des Pseudo-Objektorientierten-Codes in echten C-Code übernimmt.
Weiß einer von euch, ob es sowas schon irgendwo gibt? Oder muss ich es selbst schreiben?
Jedwege Hilfe willkommen...
Erweiterte OO-Funktionalität wie Vererbung usw. ist nicht notwendig.
MfG,
thewolf-------
Codebeispiel in C:Main:
int main( void ) { testklasse* t; t = S0testklasseOBJC(); t->setI( t, 12 ); t->getI( t ); return 0; }
Pseudo-Code, der von Hand geschrieben und per Perlprogramm übersetzt werden soll:
CLASS testklasse { PRIVATE: int i; PUBLIC: void setI( int i ); int getI(); testklasse(); }; void testklasse::setI( int i ) { THIS->i = i; } int testklasse::getI() { return THIS->i; } testklasse::testklasse() { THIS->i = 0; }
So soll die Implementierung in echtem C aussehen, nachdem das Perlprogramm preprocessed hat:
typedef struct OBJCtestklasse testklasse; struct sOBJCtestklasse { int i; void ( *setI )( testklasse*, int ); int ( *getI )( testklasse* ); }; void setI( testklasse* THIS, int i ) { THIS->i = i; } int getI( testklasse* THIS ) { return THIS->i; } testklasse* S0testklasseOBJC() { testklasse* THIS = ( testklasse* )malloc( sizeof( sOBJCtestklasse ) ); if( !THIS ) return THIS; this->setI = setI; this->getI = getI; THIS->i = 0; return THIS; }