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
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
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.
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.
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.
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.
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.
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
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.
>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".
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
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.
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.
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.
>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.
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 ...
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?
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 ;-)
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