我的问题有点奇怪,我无法找到答案。
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。
答案 0 :(得分:0)
你可以做到
<activity android:name="com.facebook.FacebookActivity" />
但请想一想这些模板参数的用途是什么。