PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Automatisierung von Klassen-Implementierung


Matti
2004-07-29, 11:21:43
ich soll ein Interface (Klassen) mit über 200 Funktionen implementieren. Davon werden zwar nur 20-30 gebraucht, aber bei den restlichen muß ich ja wenigstens eine Dummy-Funktion
int bla(bla){return 0;}
schreiben. Das ist eine ziemlich nervtötende Arbeit und da will ich mal fragen, ob man das automatisieren kann?

Also als Eingabe die Virtuellen Klassen und als Ausgabe eine CPP+H-Datei mit den Dummy-Funktionen.

PS: für C++ (VC6)

Trap
2004-07-29, 12:24:00
Wer hat sich denn das ausgedacht? Hört sich nicht besonders gut designed an.

Das Interface besteht nur aus "pure virtual"-Funktionen? Mit oder ohne Default-Implemetierung?

Viel Arbeit spart man durch copy&paste, noch mal ähnlich viel durch einen guten Editor mit dem man ausdrucksstark ersetzen kann.

Matti
2004-07-29, 13:02:27
das Interface ist ohne Default-Implementierung, deshalb muß ich eben diese Dummy-Funktionen machen. Schlecht designed isses imo nicht, denn später werden ja alle Funktionen vom Interface benötigt und demzufolge noch implementiert. Meine Aufgabe ist erstmal, eine Minimal-Version abzuliefern, die läuft, aber das Interface eben noch nicht vollständig implementiert, denn das würde den Rahmen einer Diplomarbeit sprengen.

Mit der Ersetzen-Funktion des Editors kann man zwar die H-Datei erzeugen, indem man "virtual " durch nichts ersetzt, aber bei der CPP-Datei wird's schwierig, weil dort ja noch "klasse::" eingefügt werden muß.

Matye
2004-07-29, 13:25:55
Was für ne Diplomarbeit denn? wo gehste denn Schule?

Gnafoo
2004-07-29, 14:31:45
Also wenns ganz schlimm wird, schreib ich mir manchmal ein kleines c++ Programm, das die Arbeit für mich erledigt.


#include <iostream>
#include <ifstream>
#include <string>
using namespace std;

int main(void)
{
string funcs[] = {"func1", "func2"}

// write header
ofstream hdr("bla.h");
hdr << "#ifndef _BLA_H_" << endl;
hdr << "#define _BLA_H_" << endl;
hdr << endl;

hdr << "class bla" << endl;
hdr << "{" << endl;
hdr << " public:" << endl;

for(unsigned int i=0; i<2; i++)
{
// write function definition
...
}

hdr << "};" << endl;
hdr << endl;
hdr << "#endif // _BLA_H_" << endl;

// write source
...

return(0);
}


Irgendetwas einfaches nach diesem Schema. Wenn man das in eine vorhandene Datei integrieren muss am besten am Schluß per cut&paste übernehmen.

cu DerTod

Trap
2004-07-29, 14:55:48
Original geschrieben von Matti
Mit der Ersetzen-Funktion des Editors kann man zwar die H-Datei erzeugen, indem man "virtual " durch nichts ersetzt, aber bei der CPP-Datei wird's schwierig, weil dort ja noch "klasse::" eingefügt werden muß.

Nein, das kann man natürlich auch machen. Suchen und Ersetzen mit Regexp, da kann man sowas.

Matti
2004-07-29, 15:01:39
hab's jetzt mit Suchen+Ersetzen soweit hinbekommen, daß das erste Interface in dummy-Funktionen konvertiert wurde. Jetzt muß ich das noch für's 2.Interface und die virtuellen Eltern-Klassen machen.

Dafür jetzt ein extra Tool schreiben, lohnt sich nicht, aber wenn's sowas vielleicht schon gibt...

@Matye
Entwicklung einer performance-optimierten 3D-Landkarten-Engine. Und damit meine neue Engine ohne großen Aufwand in's Projekt integriert werden kann, muß ich eben das Interface der alten Engine zur Verfügung stellen.

Demirug
2004-07-29, 15:12:06
200 Methode in einem Interface ist aber trotzdem etwas heftig. Das hört sich irgendwie nach Klebeband Methode an oder jemand hat aus alte C Funktionen ohne nachzudenken ein C++ Interface gemacht.

Ok, wenn es nun mal so ist kann man es ja nicht mehr ändern.

Matti
2004-07-29, 15:20:43
es sind über 200 in beiden Interfaces+Eltern insgesamt, also keine 200 in einem Interface.

DocEW
2004-07-31, 19:28:49
Kann sowas nicht deine Entwicklungsumgebung? OK, blöde Frage, das hättest du wohl gesehen... ich meine nur, weil Eclipse z.B. kann sowas. Kannst ja das Zeug kurz in Eclipse laden, alles generieren, und wieder zurück wechseln. Ich weiß nur gerade kein C++ Plugin.

ScottManDeath
2004-08-04, 16:30:15
Mist ich dachte es geht im VS2003 auch mit C++, es geht leider nur mit C#. Da kann man nachdem man die Klasse geschrieben hat und von den Interfaces ableitet sich durch den Klassenbrowser (oder durch TAB drücken)die Interfaces mit Dummy Funktionen implementieren lassen.

Vielleicht geht das auch mit dem Visual Studio 2005 Express Betas für C++. Müsstest du mal bei MS gucken, die sind kostenlos zum runterladen.

Lässt sich das ganze nicht so refaktorisieren dass es nicht so viele Interfaces sind bzw die Implementationen auf mehrere Klassen verteilt werden. Dann kommt es nicht so Harte auf einmal.Design Patterns?