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:
und
ab welcher grösse sollte ich auf den heap gehen ?