klassendesign in einer dll



  • hallo zusammen,

    ich habe einige design fragen, doch erst das was ich machen will oder schon mache.
    ich schreibe eine 3d engine die allerdings dem user noch viel spielraum lässt und das ganze ist in klassen gepackt. die grafikapi ist opengl und timer, keyboard und init wird von sdl übernommen.
    die engine initialisiert alle objekte und der zugriff auf die objekte sollte über accessor methoden stattfinden.

    das ganze sieht ungefähr so aus

    // types.h
    #define DLLSPEC __declspec (dllexport)
    // engine.h
    class DLLSPEC CEngine
    {
        public:
    		CEngine();
    		~CEngine();
    		// I N I T / R E L E A S E ---------------------------------------------
            // fenster erstellen
    		bool Init(
                const char *pCaption,       // fenstertitle
                int nWidth,                 // breite
                int nHeight,                // höhe
                int nBits,                  // farbtiefe
                bool bFullscreen);          // vollbildmodus
    
    		// A C C E S S O R   M E T H O D E N------------------------------------
            CTimer           *GetTimer()            { return m_pTimer; }
    
        private:
            CTimer              *m_pTimer;
    };
    // timer.h
    class CTimer
    {
        public:
            CTimer();
            ~CTimer();
    
            void DLLSPEC Update()
    
    // usw ...
    };
    // ------------------
    // exe
    int main(int argc, char *argv[])
    {
        CEngine *pEngine = new CEngine();
    
        if(!(pEngine->Init("Engine Test App 1", 640, 480, 32, false)))
        {
        	std::cout << "Couldn't init Engine" << std::endl;
        		return 0;
        }
    
        bool bDone = false;
        // mainloop
        while(!bDone)
        {
            pEngine->GetTimer()->Update();
        }
    
        delete pEngine;
    
        return 0;
    }
    

    und nun zu meinen fragen
    1. ist das vom design her ok? ich will nämlich verhindern das der user eine neue instance der klasse CTimer erstellen kann. deswegen wird nur update()exportiert
    2. sollte ich vielleicht nur ein das objekt engine freigeben und komplett auf die accessor methoden verzichten ? zb: CEngine::UpdateTimer() { m_pTimer->Update; }
    3. warum muss ich eigentlich in der exe auch sdl_main mitlinken? ich verwende ja nur in der engine sdl. (opengl muss ich zb nicht mitlinken)



  • Ich dachte immer man könne in .dlls keine Klassen unterbringen 😕



  • SirLant schrieb:

    Ich dachte immer man könne in .dlls keine Klassen unterbringen 😕

    geht doch 😉



  • Was ich mich echt mal frage: Warum erstellen alle Leute die Engine-Instanz auf dem Heap? Ist das Ding so groß das es den Stack sprengt? Hab das schon total oft so gesehen.



  • OT schrieb:

    Was ich mich echt mal frage: Warum erstellen alle Leute die Engine-Instanz auf dem Heap? Ist das Ding so groß das es den Stack sprengt? Hab das schon total oft so gesehen.

    ich sehe "noch" keinen grund das ganze auf den stack zu machen.
    ausser delete vergessen und solche sachen.
    welchen vorteil hätte ich davon ?





  • lol schrieb:

    http://www.c-plusplus.net/forum/viewtopic.php?t=69176

    und 😕

    ab welcher grösse sollte ich auf den heap gehen ?


Anmelden zum Antworten