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
Beitrag #5453063 wurde von einem Moderator gelöscht.
Schau Dir mal libclang an. Eventuell auch clangMR. - ZigZeg
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
>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".
Welche IDE benutzt du denn? Der QtCreator macht das alles sehr bequem.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.