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:
Pseudo-Code, der von Hand geschrieben und per Perlprogramm übersetzt werden soll:
So soll die Implementierung in echtem C aussehen, nachdem das Perlprogramm preprocessed hat:
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:
Code:
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:
Code:
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:
Code:
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;
}