-1
私の問題は少し奇妙で、私はそれに対する答えを見つけることができません。私は今、私は私を実装したい)私のプロトコルネストされたテンプレートクラスの継承
template <template<class TMessage> class TFrame, class TMessage>
class Protocoll
{
...
}
2)私は私のフレームとメッセージ
class MessageImpl : public Message
{
...
}
class FrameImpl : public Frame<MessageImpl>
{
...
}
3の実装を持っているため、ネストされたテンプレートクラスを持っている
1)フレームとメッセージのための実装を使用しています。
class ProtocolImpl : public Protocol<FrameImpl, MessageImpl>
{
...
}
コンパイラは最初のテンプレートパラメータ "FrameImpl"について不平を言っています。これは(明らかに)汎用テンプレート型ではないからです。
これをコンパイルする可能性はありますか? ヘッダーに実装する必要があるため、私は 'FrameImpl'汎用/テンプレートを作成したくありません。
どうもありがとう
編集:
完全なサンプル要求するのであるので: "ProtocolImpl" の宣言で
//--------------------- definitions
class Message
{
public:
virtual ~Message() = default;
virtual void foo() noexcept = 0;
};
template <class Message>
class Frame
{
public:
virtual ~Frame() = default;
virtual void foo() noexcept = 0;
};
template <template<class TMessage> class TFrame, class TMessage>
class Protocol
{
public:
virtual ~Protocol() = default;
virtual void foo() noexcept;
};
//--------------------- implementations
class MessageImpl : public Message
{
public:
void foo() noexcept
{ }
};
class FrameImpl : public Frame<MessageImpl>
{
public:
FrameImpl()
: message{ }
{ }
void foo() noexcept
{
message.foo();
}
private:
MessageImpl message;
};
class ProtocolImpl : public Protocol<FrameImpl, MessageImpl>
{
};
を、私は、テンプレートの種類としてフレームを渡すことができますが、 FrameImplではありません。
問題を再現する[MCVE]を提供してください。 –