JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=5ef36fab0bb2a961683950c8bf270d5aMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

[Design] Plattformportabilität

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
GreveN
JLI Master


Alter: 38
Anmeldedatum: 08.01.2004
Beiträge: 901
Wohnort: Sachsen - Dresden
Medaillen: Keine

BeitragVerfasst am: 31.05.2005, 07:28    Titel: [Design] Plattformportabilität Antworten mit Zitat

Moin,
ich habe ein eigentlich simples Designproblem. Ich habe eine abstrakte Klasse IRenderDevice, welche ein allgemeine Basisschnittstelle zum rendern darstellt. Von dieser leite ich verschiedene RenderDevices, je nach Plattform, ab, z.B. WinRenderDevice, XRenderDevice, ...
Diese Klassen sollen natürlich Singleton-Funktionalität besitzen, um global verfügbar zusein, idealerweise könnte man das Singleton-Pattern direkt in die Basisklasse integrieren, jedoch ergibt sich an dieser Stelle bereits ein Widerspruch für mich. Ein Singleton ist eine Klasse, von der genau eine Instanz erzeugt wird, eine abstrakte Klasse hingegen eine, von der gar keine erzeugt werden kann/darf. Es funktionierte auch nicht, weder mittels Standardsingleton, noch mit Meyer-Singleton...
Das ließe sich jedoch auch noch relativ einfach und elegant lösen, indem man das Singleton einfach in die abgeleiteten Klassen packt, auch wenn ich persönlich das nicht so "schön" finde...
Das eigentliche Problem besteht natürlich darin, dass ich von überall Zugriff auf die Methoden des jeweiligen Devices haben muss...
Unter Windows sähe das dann z.B. so aus:
CPP:
::render::WinRenderDevice::getInstance()->...

Das unschöne ergibt sich natürlich daraus, dass ich direkt auf das WinRenderDevice zugreifen muss...
Sauberer wäre es, wenn ich:
CPP:
::render::IRenderDevice::getInstance()->...

nutzen könnte, um die Instanz des jeweilig initialisierten Devices zubekommen (d.h. Singleton-Pattern muss wieder irgendwie in die Basisklasse, nur wie?).
Natürlich bestünde eine Möglichkeit, vor jedem Nutzen einer Device Methode mittels if zu überprüfen, welches initialisiert wurde, nur halte ich das für sehr unschön und mir würde ein ganzes Stück Flexibilität verloren gehen, weil es dann nicht mehr möglich wäre, für neue Plattformen beliebig neue Devices zuschreiben, ohne bestehenden Code zu ändern...
Wäre für Tipps wie ich das umgehen/lösen kann dankbar. Haltet ihr das überhaupt für eine vertretbare Variante, um Plattformunabhängigkeit zu erreichen? Meinungen bitte...

p.s.: Bestimmt ließe sich das auch lösen, indem ich "globale" Funktionen verwende und/oder[/code] die Device Instanzen in einerm "globalen" Pointer speicher...
Naja, ich habs halt gerne etwas OOP'iger.. Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Yahoo Messenger MSN Messenger
AFE-GmdG
JLI MVP
JLI MVP


Alter: 45
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 31.05.2005, 09:20    Titel: Antworten mit Zitat

Kannst du nicht auf das Singelton verzichten und das Interface statisch machen?
CPP:
#pragma once

//...

class IRenderDevice
{
public:
  static IRenderDevice *getInstance() = 0;
  //...

private:
  IRenderDevice() = 0;
  virtuel ~IRenderDevice() = 0;

};

typedef IRenderDevice IRENDERDEVICE;
typedef IRenderDevice *PIRENDERDEVICE;

und den Konstruktor des Interfaces und damit auch der abgeleiteten Klassen privat machen...
_________________
CPP:
float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum