继承嵌套模板类的实现

时间:2016-10-13 08:25:04

标签: c++ templates nested

我的问题有点奇怪,我无法找到答案。

1)我的协议有一个嵌套模板类

    template <template<class TMessage> class TFrame, class TMessage>
    class Protocoll
    {
      ...
    }

2)我确实有我的框架和消息的实现

    class MessageImpl : public Message
    {
      ...
    }

    class FrameImpl : public Frame<MessageImpl>
    {
      ...
    }

3)现在我想使用框架和消息的实现来实现我的协议。

    class ProtocolImpl : public Protocol<FrameImpl, MessageImpl>
    {
      ...
    }

编译器抱怨第一个模板参数&#34; FrameImpl&#34;,因为它(显然)不再是通用模板类型。

有没有可能进行编译? 我不想制作我的FrameImpl&#39;通用/模板,因为我需要在标题中实现它。

非常感谢

修改

因为要求提供完整的样本:

    //--------------------- 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>
    {

    };

在&#34; ProtocolImpl&#34;的声明中,我可以将Frame作为模板类型传递,但不能传递给FrameImpl。

1 个答案:

答案 0 :(得分:0)

你可以做到

<activity android:name="com.facebook.FacebookActivity" />

但请想一想这些模板参数的用途是什么。