ポリモーフィックプロトコルハンドラーを実装していますが、基本クラスで、テンプレート関数パラメーターが指定されていない純粋仮想関数が必要です。しかし、私のコンパイラは文句を言っています。これはできないと思います。これを達成する方法について誰か提案はありますか?可能であれば?そうでなければ、私は多形の考えを捨てなければならないでしょう。
これがエラーC2976'ProtoWrapper'を与える私のコードです:テンプレート引数が少なすぎます。コンパイラ=MSVC++2008。
#include "smartptrs.hpp"
#include <iostream>
class realproto {
public:
const char* getName() const { return "realproto"; }
};
class real2ndproto {
public:
const char* get2Name() const { return "real2ndproto"; }
};
template<typename T>
class ProtoWrapper : public ref_type {
public:
ProtoWrapper(T* real) : m_msg(real) {}
~ProtoWrapper() { delete m_msg; } //cannot have smart ptr on real_proto - so do this way
T* getMsg() { return m_msg; }
private:
T* m_msg;
};
class ProtocolDecoder
{
public:
virtual void Parse(ProtoWrapper<>* decoded_msg) = 0; //problem line - compile error
};
class CSTA2Decoder : public ProtocolDecoder
{
public:
virtual void Parse(ProtoWrapper<realproto>* decoded_msg) {
realproto* pr = decoded_msg->getMsg();
std::cout << pr->getName() << std::endl;
}
};
int main(int argc, char* argv[])
{
{
ref_ptr<ProtoWrapper <realproto> > msg2 = new ProtoWrapper<realproto>(new realproto);
realproto* pr1 = msg2->getMsg();
std::cout << "created new realproto\n";
}
return 0;
}