Bedingte Kompilierung für mehrere OS



  • so wie du 2 ordner anlegen kannst, kann auch ich einfach 2 projekte anlegen, macht nit copy&paste in etwa den gleichen aufwand wie 2 ordner anlegen und dort die files reinwerfen 🙄
    imho ist ein code der auf templates basiert auch sehr viel flexibler, als so ein executeprogramm_linux() kram wie du ihn vorgeschlagen hast.



  • otze schrieb:

    so wie du 2 ordner anlegen kannst, kann auch ich einfach 2 projekte anlegen, macht nit copy&paste in etwa den gleichen aufwand wie 2 ordner anlegen und dort die files reinwerfen 🙄

    Nein, überhaupt nicht. Zwei Projekte sind völlig unwartbar und nicht mit dem zu vergleichen, was ich gepostet habe.

    imho ist ein code der auf templates basiert auch sehr viel flexibler, als so ein executeprogramm_linux() kram wie du ihn vorgeschlagen hast.

    So etwas habe ich nie vorgeschlagen. Das war deine Idee.

    Flexibler ist bei den Templates überhaupt nichts. Es ist nur mehr Aufwand, wenn man mal was ändern will.



  • otze schrieb:

    //windows.hpp
    template<> class baseEngine<windows>{
         DXWrapper wrapper;
         //usw
    };
    //linux.hpp
    template<> class baseEngine<linux>{
         OpenGLWrapper wrapper;
         //usw
    };
    

    jetzt zeig mir bitte DXWrapper oder OpenGLWrapper



  • aufwand? ich erstell einfach ne neue instanz.zb in meinem letzten code das beispiel mit dem archiv: ich muss nur den filemanager verändern, das archiv selber bleibt komplett unangetastet. selbes spiel mit der engine, ich muss "nur" eine neue instanz der baseEngine anlegen,oder kann gleich die opengl version benutzen.

    btw: den funktionsnamen ohne templates hast alleine du vorgeschlagen, und da kann man schon auf einiges schließen 🙄

    achja schau mal die main an, wenn das nich wartbar ist^^ an der main muss nie rumgeschnippelt werden, sie ist einfach da, und ansonsten können alle objecte auf die gleichen dateien zugreifen.

    @ssm bin ich dumm? ich saug mir doch jetzt nich mal eben nen wrapper aus den fingern.
    es gibt keine defines, ende.



  • otze schrieb:

    template<BS Type>
    class Engine{ 
        private:
            Archive<fileManager<Type> > files;
            baseEngine<Type> engine;
        public:
            //ein paar ctors
            //und nochn paar funktionen
    
            void createNiceEffect();    
    };
    

    und hier hast du mehr Aufwand, wenn du an der Schnittstelle was ändern willst. Einmal hier in der Wrapper-Klasse und einmal in der eigentlichen Klasse.

    template<BS Type>
    void ProgramExecute(){
        WindowController<Type> a;
        a.openWindow;
        Engine<Type> b(a.getWindowHandle);
        b.createNiceEffect();//wollte ich schon immer mal schreiben ;)
        a.closeWindow; 
    }
    

    Und wo ist jetzt der Vorteil zu

    Window a;
        a.openWindow;
        Engine b(a.getWindowHandle);
        b.createNiceEffect();//wollte ich schon immer mal schreiben ;)
        a.closeWindow;
    

    ?

    Genau, es gibt keinen.



  • [quote="otze"]aufwand? ich erstell einfach ne neue instanz.zb in meinem letzten code das beispiel mit dem archiv: ich muss nur den filemanager verändern, das archiv selber bleibt komplett unangetastet. selbes spiel mit der engine, ich muss "nur" eine neue instanz der baseEngine anlegen,oder kann gleich die opengl version benutzen.

    btw: den funktionsnamen ohne templates hast alleine du vorgeschlagen, und da kann man schon auf einiges schließen 🙄

    achja schau mal die main an, wenn das nich wartbar ist^^ an der main muss nie rumgeschnippelt werden, sie ist einfach da, und ansonsten können alle objecte auf die gleichen dateien zugreifen.

    otze schrieb:

    @ssm bin ich dumm?

    wieso fragst du mich?

    otze schrieb:

    ich saug mir doch jetzt nich mal eben nen wrapper aus den fingern.

    ich möchte sie einfach gerne sehen.

    otze schrieb:

    es gibt keine defines, ende.

    wie du willst



  • [quote="DrGreenthumb"]

    otze schrieb:

    template<BS Type>
    class Engine{ 
        private:
            Archive<fileManager<Type> > files;
            baseEngine<Type> engine;
        public:
            //ein paar ctors
            //und nochn paar funktionen
    
            void createNiceEffect();    
    };
    

    und hier hast du mehr Aufwand, wenn du an der Schnittstelle was ändern willst. Einmal hier in der Wrapper-Klasse und einmal in der eigentlichen Klasse.

    erweiterbarkeit nicht veränderung,ocp,klingelts? und wieso muss ich was am wrapper ändern? der is doch weggekapselt und weit weg,da is kein änderungsbedarf. ausser im bereich dieser klasse muss ich nie was ändern.

    template<BS Type>
    void ProgramExecute(){
        WindowController<Type> a;
        a.openWindow;
        Engine<Type> b(a.getWindowHandle);
        b.createNiceEffect();//wollte ich schon immer mal schreiben ;)
        a.closeWindow; 
    }
    

    Und wo ist jetzt der Vorteil zu

    Window a;
        a.openWindow;
        Engine b(a.getWindowHandle);
        b.createNiceEffect();//wollte ich schon immer mal schreiben ;)
        a.closeWindow;
    

    lesbarkeit,erweiterbarkeit,wartbarkeit,besser zu debuggen, da der template typ immer mit angezeigt wird reicht das? oder soll ich weiter machen?

    templates sind einfach genial, du kannst mit nimialen aufwand maximale wiederverwendbarkeit erreichen,kleines beispiel?

    Archive<fileManager<windows> > files;//filemapping etc,nich so doll wenn man nur mal schnell was auslesen will 
    Archive<standardFileStream> streamFiles;
    

    mach das mit deinem coding style nach, ohne eine typ redifinition zu riskieren

    @ssm sorry hab da die smileys vergessen, ich reich sie hiermit nach 😃 😃 :p (bitte in der reihenfolge an jedes satzende einfügen^^)



  • otze schrieb:

    erweiterbarkeit nicht veränderung,ocp,klingelts?

    Nur insofern, dass du meine Variante immer noch nicht verstanden hast. Die kannst du nämlich genauso erweitern. Nur musst du dort nicht an verschiedenen Stellen ändern.

    lesbarkeit,erweiterbarkeit,wartbarkeit,besser zu debuggen, da der template typ immer mit angezeigt wird reicht das? oder soll ich weiter machen?

    Lesbarer ist dein Template-Kram nun ganz sicher nicht. Im Gegenteil. Die anderen Punkte sind unfug, da hat deine Version keinerlei Vorteile gegenüber meiner.

    templates sind einfach genial, du kannst mit nimialen aufwand maximale wiederverwendbarkeit erreichen,kleines beispiel?

    Nein, ich weiß was Templates sind.

    Archive<fileManager<windows> > files;//filemapping etc,nich so doll bei großen dateien
    Archive<standardFileStream> streamFiles;
    

    mach das mit deinem coding style nach, ohne eine typ redifinition zu riskieren

    "Mein coding style" ?

    Hier geht es um bedingte Kompilierung, je nach OS. Das kann man zwar mit den Templates machen, aber es bringt eben keine Vorteile sondern machen das ganze nur komplizierter.

    Das habe ich jetzt zum 10. Mal geschrieben. Mir wird das zu eintönig mit Dir. Soll sich mal jemand anderes dazu äussern.



  • os bedingte compilierung und wiederverwendbarkeit gehen hand in hand,je weniger du direkt wiederverwenden kannst, desto mehr musst du bei der portierung von einem os auf das andere neuschreiben.

    ich muss maximal was im untersten bereich wechseln, dort wos os spezifisch wird, der rest kann gleich bleiben, oder wenn die veränderungen zu drastisch sind, müsste man noch einzelne andere teile verändern, aber es sind verhältnismäißg wenig sachen.



  • Dein Vorschlag mit Templates ist Schrott otze 👎


Anmelden zum Antworten