下面的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
};
但重點是它直到運行時才知道哪種類型的m_Decoder應該是。 –
@ user619818:對不起,我誤讀了。沒關係! –