Library um C++-Code automatisch zu manipulieren

Gast #5452004
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
Gast #5452014
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
Gast #5452295
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.
#5452299
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.
Gast #5452311
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.
#5452314
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.
#5452861
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.
#5453216
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.
Gast #5453431
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".
Gast #5453527
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.
Gast #5454120
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.
Gast #5454537
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.
#5454546
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?
#5454547
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 ;-)
Gast #5454555
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren