"Cross-Framework" (kp wie ich mein Problem abkürzen soll xD)
Verfasst: Mi Jul 03, 2013 9:33 am
Hi, ich habe keine Ahnung, wie ich mein Problem richtig abkürzen soll
Zum eigentliche Problem: Ich habe ein kleines Server-Client-Framework gebaut, das aktuell auf SFML-Network basiert. Zukünftig möchte ich diese Dependency lösen und alternativ auch SDL_net und Boost::Asio unterstützen. Aktuell überlege ich, wie ich das realisiere. Mein bisheriger Ansatz wäre:
Ich verwende eine Art "settings.hpp", in der ich mittels Präprozessor definiere, welches Framework als Grundlage verwendet wird. Also der Art:
Die erste Zeile müsste dann entsprechend auf SFML_NETWORK oder so geändert werden, um SFML-Network zu verwenden etc. Der nächste Schritt wäre ein Wrapper für meine Sockets. Je nachdem ob SDL_NET, SFML_NETWORK oder BOOST_ASIO definiert wurde, würde ich dann die Socket-Implementierung durchführen, d.h.
Die Verwendung des Präprozessors könnte ich ggf. auch "weiter reinschachteln", d.h. einmal bei der Deklaration des "eigentlichen Sockets" und dann jeweils pro Methode verwenden. Das ist dann ja nur noch eine Feinheit.
Anschließend kann ich (sofern eines der drei Symbole definiert wurde) meine class Socket wie eine Blackbox verwenden. Die Verwendung des gemeinsamen Interfaces könnte man auch weglassen - das war jetzt nur eine erste Idee (siehe Kommentar).
Was haltet ihr davon?
@Xin: Was "häl[t]st" du davon?

Zum eigentliche Problem: Ich habe ein kleines Server-Client-Framework gebaut, das aktuell auf SFML-Network basiert. Zukünftig möchte ich diese Dependency lösen und alternativ auch SDL_net und Boost::Asio unterstützen. Aktuell überlege ich, wie ich das realisiere. Mein bisheriger Ansatz wäre:
Ich verwende eine Art "settings.hpp", in der ich mittels Präprozessor definiere, welches Framework als Grundlage verwendet wird. Also der Art:
Code: Alles auswählen
#define SDL_NET
#ifdef SDL_NET
#include <SDL/SDL_net.h>
#elif defined SFML_NETWORK
#include <SFML/Network.hpp>
#elif defined BOOST_ASIO
// boost-includes (hab die jetzt nicht genau im Kopf)
#endif
Code: Alles auswählen
class BaseSocket {
// Deklaration des gemeinsamen Interfaces
// sicherheitshalber, um zu garantieren, dass
// alle Socket-Varianten nach außen identisch sind.
};
#ifdef SDL_NET
class Socket: public BaseSocket {
// Implementierung mittels SDL_NET
};
#elif defined SFML_NETWORK
class Socket: public BaseSocket {
// Implementierung mittels SFML-Network
};
#elif defined BOOST_ASIO
class Socket: public BaseSocket {
// Implementierung mittels Boost::Asio
};
#endif
Anschließend kann ich (sofern eines der drei Symbole definiert wurde) meine class Socket wie eine Blackbox verwenden. Die Verwendung des gemeinsamen Interfaces könnte man auch weglassen - das war jetzt nur eine erste Idee (siehe Kommentar).
Was haltet ihr davon?
@Xin: Was "häl[t]st" du davon?
