2016-10-13 2 views
-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이 아닙니다.

+1

문제를 재현하는 [MCVE]를 제공해주십시오. –

답변

0

당신은

template <typename> 
using FrameImplT = FrameImpl; 

class ProtocolImpl : public Protocol<FrameImplT, MessageImpl> 
{ 
    // ... 
}; 

을 수행 할 수 있습니다하지만 그 템플릿 매개 변수의 목적이 무엇인지에 생각합니다.

관련 문제