akashi-esquizolandia/src/packet/packet_factory.h

21 lines
739 B
C++

#include "network/aopacket.h"
class PacketFactory
{
public:
// thingy here to register/map strings to constructors
static AOPacket *createPacket(QString header, QStringList contents);
static AOPacket *createPacket(QString raw_packet);
template <typename T>
static void registerClass(QString header) { class_map[header] = &createInstance<T>; };
private:
template <typename T>
static AOPacket *createInstance(QStringList contents) { return new T(contents); };
template <typename T>
static AOPacket *createInstance(QString header, QStringList contents) { return new T(header, contents); };
typedef std::map<QString, AOPacket *(*)(QStringList)> type_map;
static inline type_map class_map;
};