Forum: PC-Programmierung Library um C++-Code automatisch zu manipulieren


von T. H. (Gast)


Lesenswert?

Hallo Leute,
ich arbeite zum Teil mit etwas komplexen C++-Klassen, wo es schon 
einiges an Arbeit darstellt, ein leeres Grundgerüst für eine neue Klasse 
zu erstellen, das nur die benötigten Methoden der Parentklasse (leer) 
implementiert.

Normalerweise kopiere ich dann manuell .h- und .cpp einer halbwegs 
passenden ähnlichen Klasse, benenne alle Vorkommen des Klassennamens um, 
lösche manuell alle nicht benötigten Methoden und leere bei den anderen 
Methoden den body.

Das ganze müsste sich doch gut automatisieren lassen, so dass die 
Ausgangs .cpp- und .h von einer Library geparst werden und man 
anschließend sagt "kopiere Klasse X, nenne sie um in Klasse Y, behalte 
Methoden a,b,c, lösche deren Body und lösche alle anderen Methoden".

Gibt es eine Library für so etwas?

Mir ist klar, dass die meisten IDEs diese Schritte anbieten, aber das 
sind halt doch etliche Mausklicks, und ich würde stattdessen lieber 
schnell ein Shellskript aufrufen.

Danke
Herrmann

von Murkser (Gast)


Lesenswert?


von T. H. (Gast)


Lesenswert?

Bevor ich das Problem damit löse, kann ich mich auch 1 Woche hinsetzen 
und einen C++-Parser und -Processor in Antlr schreiben. Ich suche ein 
einfach zu bedienenes Tool, das keine Woche Einarbeitung kostet, sondern 
mit einem Tutorial zeigt, wie man z.B. Methoden-Bodies entfernt oder 
dergleichen.

Herrmann

von Wilhelm M. (wimalopaan)


Lesenswert?

Ich verstehe, was Du machen willst, allerdings kann ich mir nicht 
vorstellen, dass das irgendwie sinnvoll ist. So etwas löst man mit 
templates, nicht mit externen Tools.

von T. H. (Gast)


Lesenswert?

Wilhelm M. schrieb:
> Ich verstehe, was Du machen willst,

Das wage ich zu bezweifeln.

> allerdings kann ich mir nicht
> vorstellen, dass das irgendwie sinnvoll ist.

Ich glaube, niemand hatte gefragt, was du dir vorstellen kannst.

> So etwas löst man mit
> templates, nicht mit externen Tools.

Im Prinzip geht es darum, diese Templates aus vorhandenem Code zu 
erstellen, weil die Templateerstellung bei großen Dateien einiges an 
Arbeit macht.
Und nein, Templateerstellung löst man nicht mit Templates.

von Wilhelm M. (wimalopaan)


Lesenswert?

T. H. schrieb:
> Wilhelm M. schrieb:
>> Ich verstehe, was Du machen willst,
>
> Das wage ich zu bezweifeln.

Ich dachte, Du wolltest Hilfe haben ...

>> allerdings kann ich mir nicht
>> vorstellen, dass das irgendwie sinnvoll ist.
>
> Ich glaube, niemand hatte gefragt, was du dir vorstellen kannst.

Schlecht aufgewacht heute?

>> So etwas löst man mit
>> templates, nicht mit externen Tools.
>
> Im Prinzip geht es darum, diese Templates aus vorhandenem Code zu
> erstellen, weil die Templateerstellung bei großen Dateien einiges an
> Arbeit macht.
> Und nein, Templateerstellung löst man nicht mit Templates.

Du sprachst von Klassen, nicht von templates, nur um das mal klar zu 
stellen...

Viel Spaß weiterhin.

von T. H. (Gast)


Lesenswert?

Wilhelm M. schrieb:
> Du sprachst von Klassen, nicht von templates, nur um das mal klar zu
> stellen...

Vielleicht definierst du erstmal, was du unter Templates verstehst. 
C++-Templates helfen hier nämlich überhaupt nicht. Templates im Sinne 
einer Klasse, die noch ihrer Methodenbodies beraubt ist, und die 
vielleicht noch über Klassennamen etc. parametrisiert werden können, 
sind im Prinzip das, was ich brauche, wobei ich den Template-Schritt 
eigentlich überspringen will, weil ich regelmäßig neue Klassen aus 
anderen vorhandenen Klassen modifizieren muss.

Ich werde nun aber nicht weiter auf dich eingehen, denn du willst nur 
Recht behalten und keine Fragen beantworten.

von Wilhelm M. (wimalopaan)


Lesenswert?

T. H. schrieb:
> Wilhelm M. schrieb:
>> Du sprachst von Klassen, nicht von templates, nur um das mal klar zu
>> stellen...
>
> Vielleicht definierst du erstmal, was du unter Templates verstehst.

Das brauche ich auch nicht, denn das ist im Kontext von C++ wohl 
definiert.

> Ich werde nun aber nicht weiter auf dich eingehen, denn du willst nur
> Recht behalten und keine Fragen beantworten.

Auch in Ordnung.

von Oliver S. (oliverso)


Lesenswert?

T. H. schrieb:
> Mir ist klar, dass die meisten IDEs diese Schritte anbieten, aber das
> sind halt doch etliche Mausklicks,

Wieviel hundert Klassen pro Stunde musst du denn anlegen?

Ich würde mir für den Fall eine „leere“ Klasse schreiben, die dann 
jedesmal ins Projekt kopieren, und per refactoring-rename der IDE 
umbenennen.

Oder aber mal grundlegend über die Softwarearchitektur nachdenken, ob’s 
da nicht vielleicht doch ein paar grundlegend Optimierungsmöglichkeiten 
gibt, damit der ganze Blödsinn gar nicht erst erforderlich wird.

Oliver

Beitrag #5453063 wurde von einem Moderator gelöscht.
von Kai S. (zigzeg)


Lesenswert?

Schau Dir mal libclang an. Eventuell auch clangMR.

- ZigZeg

von T. H. (Gast)


Lesenswert?

Kai S. schrieb:
> Schau Dir mal libclang an. Eventuell auch clangMR.

Danke, das sieht sehr gut aus!

von Sven B. (scummos)


Lesenswert?

T. H. schrieb:
> Bevor ich das Problem damit löse, kann ich mich auch 1 Woche hinsetzen
> und einen C++-Parser und -Processor in Antlr schreiben.

Äh, ne. Das haben sich schon andere Leute gedacht und die sind alle 
gescheitert. Deshalb steigen sogar die IDEs jetzt alle auf LLVM/clang 
um. Und ja, ich denke auch, wenn du ernsthaft sowas machen willst ist 
vermutlich LLVM die richtige generelle Richtung, auch wenn ich keine 
Ahnung habe ob und wie gut das AST-Manipulation kann.

Evtl. kann auch ein Perlskript die beste Lösung sein; gut möglich, dass 
die tatsächlich korrekte Lösung so komplex ist dass es sich nicht lohnt.

: Bearbeitet durch User
von Duck Mc Scrooge (Gast)


Lesenswert?

>Hallo Leute,
>ich arbeite zum Teil mit etwas komplexen C++-Klassen, wo es schon
>einiges an Arbeit darstellt, ein leeres Grundgerüst für eine neue Klasse
>zu erstellen, das nur die benötigten Methoden der Parentklasse (leer)
>implementiert.

>Normalerweise kopiere ich dann manuell .h- und .cpp einer halbwegs
>passenden ähnlichen Klasse, benenne alle Vorkommen des Klassennamens um,
>lösche manuell alle nicht benötigten Methoden und leere bei den anderen
>Methoden den body.


Für mich klingt es danach, dass es eine Menge an Klassen gibt, die 
jeweils Funtionalitäten breitstellen, welche nach Bedarf in anderen 
Klassen enthalten sein sollen?
Das reinkopieren und löschen klingt für mich nach nicht sinnvoll 
angewendetem Vererben.

Was hat es mit der genannten Parentklasse auf sich?


Insgesamt - wenn man anfängt per Hand "möglichst ähnliche" Klassen zu 
kopieren und dann zu editieren, stimmt etwas mit der Architektur nicht.

Dann ist mir der Ausdruck "leeres Grundgerüst" aufgefallen. Ich denke es 
kann Sinn machen in Design Patterns zu stöbern. Z.B. gibt es sowas wie 
"structural Pattern". Man darf die aber nicht zuuuu broternst nehmen, 
manchmal / meist muss man die Beispiele ein bisschen auf den eigenen 
Anwendungsfall "tweaken".

von Ich (Gast)


Lesenswert?

Welche IDE benutzt du denn?
Der QtCreator macht das alles sehr bequem.

von Der Andere (Gast)


Lesenswert?

Duck Mc Scrooge schrieb:
> Insgesamt - wenn man anfängt per Hand "möglichst ähnliche" Klassen zu
> kopieren und dann zu editieren, stimmt etwas mit der Architektur nicht.

Korrekt

von Wühlhase (Gast)


Lesenswert?

Wenn ich mit einer Frage mal vom Thema abschweifen darf:
Kennt C++ denn nicht so etwas wie abstrakte Klassen oder abstrakte 
Funktionen in Java?

Die Problemstellung:
T. H. schrieb:
> ich arbeite zum Teil mit etwas komplexen C++-Klassen, wo es schon
> einiges an Arbeit darstellt, ein leeres Grundgerüst für eine neue Klasse
> zu erstellen, das nur die benötigten Methoden der Parentklasse (leer)
> implementiert.
ist doch wie gemacht dafür. Und alle abstrakten Methoden zu 
implementieren dauert in Netbeans exakt zwei Mausklicks (Erst die 
Warnung und dann den Lösungsvorschlag anklicken und die leeren 
Methodenbodies sind drin) und ich glaub nicht, das andere IDEs da 
unnötig viel mehr Arbeit reinstecken.
Von daher wundere ich mich doch über soviel Handarbeit.

von Ich (Gast)


Lesenswert?

Wühlhase schrieb:
> Kennt C++ denn nicht so etwas wie abstrakte Klassen oder abstrakte
> Funktionen in Java?

Doch natürlich.
Wenn man aber mit MS Notepad arbeitet, hat man dennoch viel Tipparbeit.

von T. H. (Gast)


Lesenswert?

Leute, Kai hat mein Problem mit seinem Hinweis auf libclang gelöst. Ihr 
braucht nicht weiter mit eurem Kindergartensoftwarearchitekturwissen 
prahlen.

Dass man nicht noch mal komplett von null anfängt, wenn mal auf einem 
riesigen Open-Source Projekt aufbaut, das seit 25 Jahren gewachsen ist 
und daher nicht optimal vom heutigen Stand des Softwaredesigns gesehen, 
könnt ihr euch in eurer kleinen Welt offenbar nicht vorstellen.

Ich muss mit dem arbeiten, was ich habe. Alles von vorne und nochmal 
richtig machen könnt ihr gerne in eurem Kindergarten, dann seid ihr im 
Erwachsenenalter vielleicht da, wo ich jetzt bin. Wenn ihr euch gerne 
reden hört, macht weiter so und gebt euren Senf auf den großen Haufen, 
der hier schon abgeladen wurde. Ich bin raus.

von Duck Mc Scrooge (Gast)


Lesenswert?

>Dass man nicht noch mal komplett von null anfängt, wenn mal auf einem
>riesigen Open-Source Projekt aufbaut, das seit 25 Jahren gewachsen ist
>und daher nicht optimal vom heutigen Stand des Softwaredesigns gesehen,
>könnt ihr euch in eurer kleinen Welt offenbar nicht vorstellen.


Nein, dass sind Voraussetzungen, von denen du am Anfang nichts gesagt 
hast.

von Wilhelm M. (wimalopaan)


Lesenswert?

Jetzt wäre es doch mal spannend zu wissen, in welchem 25 Jahre alten 
C++-OSS Projekt auch heute noch so viele Klasse pro Tag hinzugefügt 
werden müssen, als dass man dafür ein Tool schreibt ...

von Carl D. (jcw2)


Lesenswert?

Duck Mc Scrooge schrieb:
>>Dass man nicht noch mal komplett von null anfängt, wenn mal auf einem
>>riesigen Open-Source Projekt aufbaut, das seit 25 Jahren gewachsen ist
>>und daher nicht optimal vom heutigen Stand des Softwaredesigns gesehen,
>>könnt ihr euch in eurer kleinen Welt offenbar nicht vorstellen.
>
>
> Nein, dass sind Voraussetzungen, von denen du am Anfang nichts gesagt
> hast.

Jemand von seiner Qualifikation hätte eine solche Frage hier gar nicht 
stellen müssen, oder?

von Wilhelm M. (wimalopaan)


Lesenswert?

Carl D. schrieb:
> Duck Mc Scrooge schrieb:
>>>Dass man nicht noch mal komplett von null anfängt, wenn mal auf einem
>>>riesigen Open-Source Projekt aufbaut, das seit 25 Jahren gewachsen ist
>>>und daher nicht optimal vom heutigen Stand des Softwaredesigns gesehen,
>>>könnt ihr euch in eurer kleinen Welt offenbar nicht vorstellen.
>>
>>
>> Nein, dass sind Voraussetzungen, von denen du am Anfang nichts gesagt
>> hast.
>
> Jemand von seiner Qualifikation hätte eine solche Frage hier gar nicht
> stellen müssen, oder?

Hatte ich mir eben verkniffen zu sagen: ist der Held und kennt 
libclang/etc. nicht ;-)

von Bert3 (Gast)


Lesenswert?

Darf ich den Troll füttern, Mama? Jetzt mal ehrlich dein Ton ist völlig 
unangebracht, keine Ahnung warum du seit der 1. Antwort um dich 
schlägst? Würdest du genau so auch in einem Bewerbungsgespräch auftreten 
wenn dir die Antworten nicht gefallen - ich denke eher nicht, also warum 
dann hier? Klar gibt es einen haufen Vollanfänger im Internet - aber das 
wissen wir doch schon lange und chillen trotzdem

>Leute, Kai hat mein Problem mit seinem Hinweis auf libclang gelöst.

brauchst du wirklich einen vollwertigen Parser/AST/Code-Generator für 
deine Lösung - hätte nicht auch eine Beschreibungsdatei/pseudo IDL nebst 
kleinem Codegenerator gereicht - deine Frage gibt solche Details aber 
leider nicht her, wie soll man da adäquat antworten

>Dass man nicht noch mal komplett von null anfängt, wenn mal auf einem
>riesigen Open-Source Projekt aufbaut, das seit 25 Jahren gewachsen ist
>und daher nicht optimal vom heutigen Stand des Softwaredesigns gesehen,
>könnt ihr euch in eurer kleinen Welt offenbar nicht vorstellen.

Das ist doch völliger Standard - du lässt es so klingen als wäre das was 
ganz besonderes - wenn du mal x Projekte durch hast (in verschiedenen 
Firmen) wirst du verstehen wie komisch es ist über die "komplexität" des 
Projektes an dem man arbeitet zu sprechen - immer subjektiv, niemand hat 
die Chance es nach zu voll ziehen = völlig sinnfrei

>Ich muss mit dem arbeiten, was ich habe.

Hat ja auch keiner was anderes gefordert

>Alles von vorne und nochmal
>richtig machen könnt ihr gerne in eurem Kindergarten, dann seid ihr im
>Erwachsenenalter vielleicht da, wo ich jetzt bin.

Den Satz lass ich mir auf ein T-Shirt drucken, ist der von dir?

>Wenn ihr euch gerne reden hört, macht weiter so und gebt
>euren Senf auf den großen Haufen, der hier schon abgeladen wurde.

hier kommunizieren Leute aller Klassen von Hello-world-geht-nicht bis 
haupt-maintainer-des-gccs, aus deiner 1. Frage kann man dazu nichts 
ableiten

>Ich bin raus.
und schon kann fällt dein Blutdruck wieder auf normal Niveau

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.