下面的 HandleMessages 类有一个 ProtocolDecoder* 类型的成员变量。当 ProtocolDecoder 不是模板类时,这很好。现在我已经变成了这样,但是现在代码无法编译。
在运行时有一个工厂函数可以创建所需的解码器。
如果我不能有一个成员 m_Decoder 那么我怎样才能达到同样的效果呢?
如果我尝试将成员声明为 ProtocolDecoder* m_Decoder;
我得到编译器错误:错误 C2059:语法错误:'<'
并查看对正在编译的类模板实例化“LogPlayer”的引用
template <typename T>
class ProtocolDecoder
{
public:
virtual const char* ProtocolName() = 0;
virtual ProtoWrapper<T>* DecodeMsg(const unsigned char* msg, int length) = 0;
...
};
class ABCDecoder : public ProtocolDecoder<ABC_msg>
{
public:
virtual const char* ProtocolName() {return "ABC"; }
virtual ProtoWrapper<ABC_msg>* DecodeMsg(const unsigned char* msg, int length);
};
//lots of different decoders derived from ProtocolHandler
class HandleMessages
{
public:
void Process() {}
private:
//ProtocolDecoder<T>* m_Decoder; //Want a Protocol member variable - but don't know type until runtime
};