
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?
