我有一个(预先设计且不可更改的)抽象工厂,我需要使用它。用法是创建稍后发送到服务器的特定类型的消息。它需要一个消息ID才能工作。
示例:
int messageID = 1000;
StartServerMessage *startServer = (StartServerMessage*)ServerAbstractFactory::CreateObject(messageID);
确实有很多不同的消息,我想知道,如果有可能在创建每种消息类型的实例时做出简短而优雅的方法。 目前我手动调用每种类型的东西:
//I know at this point i want an IntegrityCheckMessage
int messageID = 2050;
IntegrityCheckMessage* message = (IntegrityCheckMessage*)ServerAbstractFactory::CreaterObject(messageID);
我试着做出类似的事情:
auto* message = (auto*)ServerAbstractFactory::CreateObject(messageID);
但似乎" auto不被允许"这里。
每条消息至少从抽象类ServerMessage
派生。一些特殊的消息来自不止这个类。
我知道我在这里需要模板,但是无法在不调用模板类的构造函数的情况下考虑使用它们的任何方法(在c ++ 14中似乎不允许)
如果没有为每种消息类型实现单一方法,anybode是否知道处理此问题的方法?
在Visual Studio 2015和C ++ 14中使用Windows 10 64位
干杯