Klassen-Erzeugungs Assistent



  • Nett.

    Denk mal über darüber nach, ob alles Inline sein muss, gerade
    bei Konstruktoren kann das imho nicht immer sinn machen.
    Zu dem sollte der Setter und Getter für variablen optional sein.
    m_itest für int test finde ich auch nicht gerade prikelnd, sollte
    auch eine Option sein, oder evtl. sogar einstellbar.

    Das Ding generiert nur den Rumpf einer klasse,
    weitere Funktionen etc. kann man nicht hinzufügen.
    Das du unbekannte Typen mit NULL intialisierst find
    ich auch bedenkenswert, auserdem macht es sinn alles mit 0
    zu initialisieren ???

    Btw. hab ich ein ähnliches Tool:
    Codemaker

    phlox



  • Zum initialisieren: Der Code soll ja nur ein Gerüst sein. Initialisieren kann man ja dann nachher noch selber. Wenn der Generator zu viele Angaben verlangt (z.B. Werte für Initialsierung), dann kann man den Code auch gleich im Editor selber eintippen.



  • Ich würde einfach alle Member nach 0 initialisieren, vor allem pointer. Man kann das später immer noch nach-editieren. Geht immerhin schneller als alle member nochmal zu tippen. Bei den zeigern ist eine initialisierung nach 0 sogar zwingend notwendig, da dir sonst jede if-abfrage gar nix bringt...

    rya.
    Scorcher24



  • Scorcher24 schrieb:

    Bei den zeigern ist eine initialisierung nach 0 sogar zwingend notwendig

    Nö.



  • HumeSikkins schrieb:

    Hallo,
    die kanonische Signatur des Copy-Ctors ist:

    ClassName(const ClassName& other);
    

    Die des operator=:

    ClassName& operator=(const ClassName& other);
    

    Schließlich willst du in der Regel ja auch Kopien von temporären Objekten erzeugen.

    Ok. Hab ich drin 🙂 Vielen Dank für den Hinweis.

    phlox81 schrieb:

    Nett.

    Denk mal über darüber nach, ob alles Inline sein muss, gerade
    bei Konstruktoren kann das imho nicht immer sinn machen.

    Was meinen andere im Forum denn hierzu? *umherfrag*

    phlox81 schrieb:

    Zu dem sollte der Setter und Getter für variablen optional sein.

    Done 😃

    phlox81 schrieb:

    m_itest für int test finde ich auch nicht gerade prikelnd, sollte auch eine Option sein, oder evtl. sogar einstellbar.

    Aus "int test" wird bei mir "m_iTest". Was ist daran schlimm bzw. sollte einstellbar sein? Oder wolltest Du garnicht auf die Kleinschreibung hinaus? Ist wahrscheinlich auch gleich: Hab ja jetzt einen Haken drin "Ungarische Notation benutzen".

    phlox81 schrieb:

    auserdem macht es sinn alles mit 0 zu initialisieren ???

    Wer macht denn sowas? Für Zahlentypen macht das imho Sinn und der Rest wird ebenfalls mit der entsprechende Null-Darstellung initialisiert. Wo das ein Problem ist kann man doch wie schon gesagt einfach selbst nochmal durch den Code gehen (Stichwort Gerüst)

    Die Initialisiererliste ist nun für den Standardkonstruktor drin (sonst brauche ich die doch nich, oder?) wobei wie vorgeschlagen alles mit NULL initialisiert wird. Der Rest ist vorerst eben Handarbeit 🙂

    Stand der Dinge nach dem heutigen Update (TODO):
    [1] Doxygen-Kommentare

    Sonst noch was tolles?
    Was haltet ihr von einer Optionalen Serialisierung? Was sollte sonst noch rein? Bugs entdeckt?

    Schönen Sonntag Euch allen 🙂



  • Hab jetzt die Doxygen-Geschichte im JavaDoc-Stil drin

    /**
     *  Kurzbeschreibung.
     *  Datei:   foo.h
     *  Autor:   narf
     *  Version: zort
     *  Ausführliche Beschreibung der Klasse.
     */
    

    die Includes in die Guards mit reingezogen und überlege also Option die GPL/LGPL einbinden zu lassen. Wie seht Ihr das? Macht Ihr sowas? Welche Lizenzen wären noch zu berücksichtigen?

    Gn8 zusammen



  • Khadgar schrieb:

    Hab jetzt die Doxygen-Geschichte im JavaDoc-Stil drin

    /**
     *  Kurzbeschreibung.
     *  Datei:   foo.h
     *  Autor:   narf
     *  Version: zort
     *  Ausführliche Beschreibung der Klasse.
     */
    

    die Includes in die Guards mit reingezogen und überlege also Option die GPL/LGPL einbinden zu lassen. Wie seht Ihr das? Macht Ihr sowas? Welche Lizenzen wären noch zu berücksichtigen?

    Gn8 zusammen

    GPL und LPGP sind gerichtlich in deutschland anerkannt. gabs schon urteile zu. Bau darauf..
    rya.
    Scorcher24



  • HM. Ich bekomme diesen Fehler

    Keine Kurzbeschreibung angegeben
    

    die finde ich aber nirgends?
    Hanns



  • Khadgar schrieb:

    phlox81 schrieb:

    m_itest für int test finde ich auch nicht gerade prikelnd, sollte auch eine Option sein, oder evtl. sogar einstellbar.

    Aus "int test" wird bei mir "m_iTest". Was ist daran schlimm bzw. sollte einstellbar sein? Oder wolltest Du garnicht auf die Kleinschreibung hinaus? Ist wahrscheinlich auch gleich: Hab ja jetzt einen Haken drin "Ungarische Notation benutzen".

    IMHO ist die Ungarische (UN)Notation im Zeitalter von OOP überholt.
    Wie soll ich eigene Typen kennzeichnen ? Was definiere ich dann als
    Integralen Typen ? INT ist in ANSI C nicht genau definiert, bzw. hängt von der Plattform
    ab, int kann 16,32 oder 64 bit sein.
    Oder was anderes.
    Zu dem wiederspricht dies imho, dem Konzept der Kapselung, wer soll
    den bitte schön am namen erkennen können, was ich intern verwende ?
    Auch halte ich das m_ für member für überholt, es ist nur ein gimmick,
    genauso könnte man l_ für lokale Variablen einführen. Leserlicher würde
    der Code dadurch wohl nicht...
    Und, wie soll ich mit der ungarischen meine eigenen Typen kennzeichnen ?
    Oder einen String ? Ein String kann viele Formen haben, ob nun char*
    oder UNICODE (da gibts auch noch unterschiede... 🙄) oder
    was ganz anderes.

    phlox



  • Scorcher24 schrieb:

    GPL und LPGP sind gerichtlich in deutschland anerkannt. gabs schon urteile zu. Bau darauf..
    rya.
    Scorcher24

    Werd ich denke ich dann zumindest als Option einbauen 🙂

    HannsW schrieb:

    HM. Ich bekomme diesen Fehler

    Keine Kurzbeschreibung angegeben
    

    die finde ich aber nirgends?
    Hanns

    *g* Hast wohl recht. Ich hatte faulerweise nur das Skript, nicht aber die Darstellung geupdated 🙂 Korrigiert.

    phlox81 schrieb:

    IMHO ist die Ungarische (UN)Notation im Zeitalter von OOP überholt [...] Leserlicher würde der Code dadurch wohl nicht...
    Und, wie soll ich mit der ungarischen meine eigenen Typen kennzeichnen ?
    Oder einen String ? Ein String kann viele Formen haben, ob nun char*
    oder UNICODE (da gibts auch noch unterschiede... 🙄) oder
    was ganz anderes.

    phlox

    Khadgar schrieb:

    Hab ja jetzt einen Haken drin "Ungarische Notation benutzen".

    Ich werd nicht versuchen irgendwen zu irgendwas zu zwingen 😃



  • Ach du dachtest ans Einfügen in die klasse. Na da auf alle Fälle. Geht doch nicht ohne... 😉
    Ich hab gedacht du meinst ob Du die Software darunter vertreiben sollst....
    😃

    rya.
    Scorcher



  • Khadgar schrieb:

    Was meinen andere im Forum denn hierzu? *umherfrag*

    die grundidee ist ganz gut.
    aber an der ausführung hab ich leichte zweifel.

    ich teste mal den assi und mach dazu auch alle schalter an. vielleicht erkenne ich ja einige als so schlimm nutzlos, daß du sie besser wegmachst.

    Bogenschuetze.cpp:

    #include "Bogenschuetze.h"
    

    schade dabei bin ich gerade erst auf .hpp statt .h umgestiegen.

    // TODO: Hier die interessanten Methoden implementieren.
    

    auch schade. muss ich ja jedesmal löschen, wenn ich die datei erzeugt hab.

    // Die Konstruktoren, Selektoren und Operatoren wurden bereits inline in .h implementiert.
    

    was sind selektoren? das, was anderer inspektoren nennen? oder eher grantopalen? aus dem threadverlauf erntnehme ich, daß es getter sein könnten?
    und ein fehler. kein newline am dateiende. da spinnen manche compiler.

    Bogenschuetze.h:

    /**
     * Landeinheit mit Fernkampfwaffe.
     * Datei:   Bogenschuetze.h 
     * Author:  Volkard Henkel 
     * Version: 0.01 
     * Ein Bogensch³tze trõgt eine Waffe, die ³ber lõngere Distanzen angreifen kann. Er ist typischerweise schwach gepanzert. Im Nahkampf ist er ne Flasche. 
     */
    

    dateiname ist doof. man hat die datei doch eh unter diesem namen im filesystem. autor schreibt man ohne h. versionsmanagement auf dateibasis ist etwas übertrieben. wer macht denn das (und noch dazu per hand)? aber du gibst hier ein versprechen ab. wenn die versionsnummer gleich ist, ist die semantik des interfaces gleich. der kurzkommentar und der langkommentar bringen hier nur ganz extrem selten was. normalerweise sagt der klassenname alles. also lass die kommentare weg, in den seltenen fällen, daß da was hin muss, kann der user sich was hinschreiben. also ich halte es nicht für praktischer, am anfang den kommentar in das formular einzugeben als nachher oder mittendrin ihn in die datei zu schreiben.
    warum kommentare in /**/ statt in // ?

    bleibt also nur das feld autor übrig. und hier hab ich ne echte verbesserung. bau ein tool, das auf meinem rechner gestartet wird und das alle *.h mit ein paar kommentarzeilen am anfang (aber nach dem includeguard) versieht und gegebenenfalls den alten kommentar löscht. damit ich alle files mit nem licence-kommentar ausstatten kann.

    /// DEFINITION /////////////////////////////////////////////
    

    naja. nutzloser kommentar.
    mach außerdem so /////-streifen genau 80 zeichen breit.

    #ifndef BOGENSCHUETZE
    #define BOGENSCHUETZE
    

    der #include-guard gehört ganz oben hin. zum einen bringt es ein mikro mehr speed beim compilieren, zum anderenhilft es dummen compilern, das als includeguard zu erkennen.

    /// INCLUDES ///////////////////////////////////////////////
    

    hab ich erkannt, daß jetzt die includes kommen. hab auch erkannt, daß es nicht mehr definition ist.

    #include \"NoCopy.hpp\"
    

    fehlerchen gemacht bei den tüddelchen.

    #include <string>
    

    erste sinnvolle zeile.

    /// NAMESPACES /////////////////////////////////////////////
    

    dafür ist die wieder nutzlos.

    using namespace std;
    

    den knopf kannste wegmachen. man soll nie using namespace in einen header schreiben.

    class Bogenschuetze
    {
    

    nicht mein bracing style.

    private:
    

    du musst mit tabs einrücken. leerzeichen passen zu keiner IDE, außer ich hab zufällig mal die tabsize so eingestellt wie du. tabs gehen immer.

    string m_sName;
    

    ungarische notation ist sowas von tot, biete den kopf besser nicht an.

    int m_iMinAngriffsDistanz;
        int m_iMaxAngriffsDistanz;
    

    manchmal brauchen attribute kommentare. danke, daß du die nicht auch schreiben willst.

    public:
    

    ok.

    Bogenschuetze()
        {
          m_sName = "";
          m_iMinAngriffsDistanz = 0;
          m_iMaxAngriffsDistanz = 0;
        }
    

    nicht ideal.
    der einzig sinnvolle konstruktor, den du bauen darfst, ist

    
    
    Bogenschuetze(const Bogenschuetze& rhs)
          m_sName = rhs.getName();
          m_iMinAngriffsDistanz = rhs.getMinAngriffsDistanz();
          m_iMaxAngriffsDistanz = rhs.getMaxAngriffsDistanz();
        }
    [cpp]
    wie haben doch so ein komisches konzept mit "eine klasse für einen zweck". überlegen wir mal, welche klassen einen destruktor. die, die ressourcen allokieren. also vector, queue, stack. sonst noch was? jo, string. vielleicht noch ein paar, aber nicht so viele. und genau die brauchen nen copy-ctor und nen zuweisungsoperator aus technischen gründen. deie masse der klassen darf sowas eigentlich gar ncht nötig haben.
    

    inline Bogenschuetze& operator=(const Bogenschuetze& rhs)
    {
    if (this == &rhs) return *this;
    m_sName = rhs.getName();
    m_iMinAngriffsDistanz = rhs.getMinAngriffsDistanz();
    m_iMaxAngriffsDistanz = rhs.getMaxAngriffsDistanz();
    return *this;
    }
    [/cpp]
    konntest copy&swap benutzen.
    ah, und swap könntest du einbauen.

    Bogenschuetze(string name, int minangriffsdistanz, int maxangriffsdistanz)
        {
          m_sName = name;
          m_iMinAngriffsDistanz = minangriffsdistanz;
          m_iMaxAngriffsDistanz = maxangriffsdistanz;
        }
    

    der ist praktisch.

    inline const string getName() const { return m_sName; }
        inline const int getMinAngriffsDistanz() const { return m_iMinAngriffsDistanz; }
        inline const int getMaxAngriffsDistanz() const { return m_iMaxAngriffsDistanz; }
    
        inline void setName(string s) { m_sName = s; }
        inline void setMinAngriffsDistanz(int i) { m_iMinAngriffsDistanz = i; }
        inline void setMaxAngriffsDistanz(int i) { m_iMaxAngriffsDistanz = i; }
    

    ich bezweifle, daß getter und setter oft genug gebraucht werden.

    inline bool operator== (Bogenschuetze& rhs) const
        {
          if (this == &rhs) return true;
          if (m_sName != rhs.getName()) return false;
          if (m_iMinAngriffsDistanz != rhs.getMinAngriffsDistanz()) return false;
          if (m_iMaxAngriffsDistanz != rhs.getMaxAngriffsDistanz()) return false;
          return true;
        }
    

    ok.

    };
    #endif
    

    manche schreiben gerne

    };
    #endif //BOGENSCHUETZE
    

    und statt BOGENSCHUETZE vielleicht BOGENSCHUETZE_H, damit es keine kollision mit nem makro gibt.

    es wäre gut, wenn du noch nen knopf einbauen würdest "diese einstellungen merken" und daß du die einstellungen als cookie speicherst. dann kannste auch noch ein paar mehr features einbauen.
    - tabs statt spaces. (bei mir an)
    - anderer bracing stype. (bei mir an)
    - the big three. (bei mir normalerweise aus)
    - getter/setter. (bei mir normalerweise aus)
    - kopieren verboten. (bei mir an)
    - .hpp statt .h. (bei mir an)
    - kommentar autor. (bei mir aus)
    - licence-text. (ganzen string in den cookie rein!)
    - zusätzlicher button "GPL in das licence-textfeld kopieren"
    - zusätzlicher button "LGPL in das licence-textfeld kopieren"
    - kommetar version. (bei mir aus)
    - kommetar dateiname. (bei mir aus)
    - kommentar klassenbeschreibung. (bei mir meistens aus)
    - basisklasse
    - attribute am ende statt am anfang
    - struct statt class (was automatisch keine getter/setter baut)

    recht gut bewäht bei mir hat sich ein lokales tool, daß nur den klassennamen abfragt und anhand eines templates (wortbedeutung wie bei php) die *.h und *.cpp baut. so ein template für *.h sah so aus:

    #ifndef CLASS_H__UID
    #define CLASS_H__UID
    #pragma once
    
    ////////////////////////////////////////////////////////////////////////////////
    // Copyright (c) 2004, Volkard Henkel
    
    #include "NoCopy.h"
    
    class Class
    {
    NOCOPY;
    private:
            CURSOR
    public:
    };
    
    #endif//CLASS_H__UID
    

    dabei hat der assi Class ersetzt zum eingegebenen Klassennamen und CLASS zum KLASSENNAMEN und UID war ne lange zufallszeichenfolge. und die ide war so nett, den corsor auch dahinzusetzen, woe CURSOR stand.

    normalerweise fange ich damit an, die attribute hinzuschreiben. und da ich selten getter/setter habe, kann ich die auch einfach in den code schreiben.



  • volkard schrieb:

    Bogenschuetze.cpp:

    #include "Bogenschuetze.h"
    

    schade dabei bin ich gerade erst auf .hpp statt .h umgestiegen.

    Hab das jetz mal Probehalber auf hpp umgestellt. Sollte zeitgemäßer sein.

    volkard schrieb:

    // TODO: Hier die interessanten Methoden implementieren.
    

    auch schade. muss ich ja jedesmal löschen, wenn ich die datei erzeugt hab.

    Ist auch ein gutes Argument 🙂

    volkard schrieb:

    // Die Konstruktoren, Selektoren und Operatoren wurden bereits inline in .h implementiert.
    

    was sind selektoren? das, was anderer inspektoren nennen? oder eher grantopalen? aus dem threadverlauf erntnehme ich, daß es getter sein könnten?

    Hmm. Getter... Klingt mekrwürdig. Aber es läuft auf die Get*/Set* Methoden hinaus.

    volkard schrieb:

    und ein fehler. kein newline am dateiende. da spinnen manche compiler.

    Done

    volkard schrieb:

    Bogenschuetze.h:

    /**
     * Landeinheit mit Fernkampfwaffe.
     * Datei:   Bogenschuetze.h 
     * Author:  Volkard Henkel 
     * Version: 0.01 
     * Ein Bogensch³tze trõgt eine Waffe, die ³ber lõngere Distanzen angreifen kann. Er ist typischerweise schwach gepanzert. Im Nahkampf ist er ne Flasche. 
     */
    

    dateiname ist doof. man hat die datei doch eh unter diesem namen im filesystem. autor schreibt man ohne h. versionsmanagement auf dateibasis ist etwas übertrieben. wer macht denn das (und noch dazu per hand)? aber du gibst hier ein versprechen ab. wenn die versionsnummer gleich ist, ist die semantik des interfaces gleich.

    Mit Ausnahme des Authors gehen die Meinungen dahingehend anscheinander auseinander. Ich habe versucht mich möglichst an diese Quelle zu halten.

    volkard schrieb:

    der kurzkommentar und der langkommentar bringen hier nur ganz extrem selten was. normalerweise sagt der klassenname alles. also lass die kommentare weg, in den seltenen fällen, daß da was hin muss, kann der user sich was hinschreiben. also ich halte es nicht für praktischer, am anfang den kommentar in das formular einzugeben als nachher oder mittendrin ihn in die datei zu schreiben.

    Hmm. Man muss ja die Header-Kommentare nicht aktivieren, oder meinst du was anderes?

    volkard schrieb:

    warum kommentare in /**/ statt in // ?

    Bin ich von Java so gewohnt. Finde ich irgendwie schöner und wird durch Doxygen unterstützt 🙂

    volkard schrieb:

    /// DEFINITION /////////////////////////////////////////////
    

    naja. nutzloser kommentar.
    mach außerdem so /////-streifen genau 80 zeichen breit.

    Hast bezüglich dieser Kommentare wohl recht. Hab zuletzt zuviel Lamothe gelesen.

    volkard schrieb:

    #ifndef BOGENSCHUETZE
    #define BOGENSCHUETZE
    

    der #include-guard gehört ganz oben hin. zum einen bringt es ein mikro mehr speed beim compilieren, zum anderenhilft es dummen compilern, das als includeguard zu erkennen..

    Done

    volkard schrieb:

    #include \"NoCopy.hpp\"
    

    fehlerchen gemacht bei den tüddelchen.[/cpp]

    Gut. "Korrigiert". Ab jetzt ohne Anführungszeichen eingeben.

    [quote="volkard"]

    #include <string>
    

    erste sinnvolle zeile. [/cpp]
    Vielen Dank *fg*

    volkard schrieb:

    using namespace std;
    

    den knopf kannste wegmachen. man soll nie using namespace in einen header schreiben.

    Weil?

    volkard schrieb:

    class Bogenschuetze
    {
    

    nicht mein bracing style.

    Hmm. War meiner bis vor kurzem auch nicht. Kann dem aber was abgewinnen 🙂
    Ausserdem kann ich's wenn es um den Stil geht sowieso nicht jedem Recht machen 😞

    volkard schrieb:

    private:
    

    du musst mit tabs einrücken. leerzeichen passen zu keiner IDE, außer ich hab zufällig mal die tabsize so eingestellt wie du. tabs gehen immer.

    Done (Glaub ich. Mein PHP-Editor macht da gerade beim betrachten der Dateien keine(?) Unterschiede

    volkard schrieb:

    string m_sName;
    

    ungarische notation ist sowas von tot, biete den kopf besser nicht an.

    Weil?

    [quote="volkard"]

    int m_iMinAngriffsDistanz;
        int m_iMaxAngriffsDistanz;
    

    manchmal brauchen attribute kommentare. danke, daß du die nicht auch schreiben willst. [/cpp]
    Zynisch geworden oder verstehe ich den Sinn nur nicht?

    volkard schrieb:

    Bogenschuetze()
        {
          m_sName = "";
          m_iMinAngriffsDistanz = 0;
          m_iMaxAngriffsDistanz = 0;
        }
    

    nicht ideal.
    der einzig sinnvolle konstruktor, den du bauen darfst, ist

    
    
    Bogenschuetze(const Bogenschuetze& rhs)
          m_sName = rhs.getName();
          m_iMinAngriffsDistanz = rhs.getMinAngriffsDistanz();
          m_iMaxAngriffsDistanz = rhs.getMaxAngriffsDistanz();
        }
    [cpp]
    

    Hmm. Ich verstehe trotzdem nicht so ganz was dagegen spricht, zumal ich es als nützlich empfinde meine Objekte auf alle mögliche Arten konstruieren zu können. Wäre nett wenn du das auch mal kurz anreissen könntest 🙂

    volkard schrieb:

    konntest copy&swap benutzen.
    ah, und swap könntest du einbauen.

    Öhm. Wenn ich wüsste was es wäre würde ich das vielleicht tun

    volkard schrieb:

    Bogenschuetze(string name, int minangriffsdistanz, int maxangriffsdistanz)
        {
          m_sName = name;
          m_iMinAngriffsDistanz = minangriffsdistanz;
          m_iMaxAngriffsDistanz = maxangriffsdistanz;
        }
    

    der ist praktisch.

    Danke. Finde ich auch 😃

    volkard schrieb:

    ich bezweifle, daß getter und setter oft genug gebraucht werden.

    Hmm. Wann ist "oft genug"? Könnte man allerdings auch optional machen. Stimmt schon.

    volkard schrieb:

    };#endif
    

    manche schreiben gerne

    }; #endif //BOGENSCHUETZE
    

    und statt BOGENSCHUETZE vielleicht BOGENSCHUETZE_H, damit es keine kollision mit nem makro gibt.

    Done

    volkard schrieb:

    es wäre gut, wenn du noch nen knopf einbauen würdest "diese einstellungen merken" und daß du die einstellungen als cookie speicherst. dann kannste auch noch ein paar mehr features einbauen.
    - tabs statt spaces. (bei mir an)
    - anderer bracing stype. (bei mir an)
    - the big three. (bei mir normalerweise aus)
    - getter/setter. (bei mir normalerweise aus)
    - kopieren verboten. (bei mir an)
    - .hpp statt .h. (bei mir an)
    - kommentar autor. (bei mir aus)
    - licence-text. (ganzen string in den cookie rein!)
    - zusätzlicher button "GPL in das licence-textfeld kopieren"
    - zusätzlicher button "LGPL in das licence-textfeld kopieren"
    - kommetar version. (bei mir aus)
    - kommetar dateiname. (bei mir aus)
    - kommentar klassenbeschreibung. (bei mir meistens aus)
    - basisklasse
    - attribute am ende statt am anfang
    - struct statt class (was automatisch keine getter/setter baut)

    Ich hab mir den obigen Teil mal ausgedruckt. Ein paar Sachen finde ich zwar nicht unbedingt nützlich aber i.A. sind da viele nette Ideen bei 🙂

    volkard schrieb:

    recht gut bewäht bei mir hat sich ein lokales tool, daß nur den klassennamen abfragt und anhand eines templates (wortbedeutung wie bei php) die *.h und *.cpp baut. so ein template für *.h sah so aus:

    #ifndef CLASS_H__UID
    #define CLASS_H__UID
    #pragma once
    
    ////////////////////////////////////////////////////////////////////////////////
    // Copyright (c) 2004, Volkard Henkel
    
    #include "NoCopy.h"
    
    class Class
    {
    NOCOPY;
    private:
            CURSOR
    public:
    };
    
    #endif//CLASS_H__UID
    

    dabei hat der assi Class ersetzt zum eingegebenen Klassennamen und CLASS zum KLASSENNAMEN und UID war ne lange zufallszeichenfolge. und die ide war so nett, den corsor auch dahinzusetzen, woe CURSOR stand.

    normalerweise fange ich damit an, die attribute hinzuschreiben. und da ich selten getter/setter habe, kann ich die auch einfach in den code schreiben.

    Boah. ächtz
    Vielen Dank dafür Dir so viel Zeit für die Auseinandersetzung mit meinem Projekt genommen zu haben. Ich habe einige Vorschläge von dir bereits auf meinem Server umgesetzt und werde dem im Laufe des tage noch einiges zufügen und dann die öffentliche Version aktualisieren.


Anmelden zum Antworten