当派生类显式定义模板类型时,调用父类中定义的函数

时间:2016-06-23 15:30:30

标签: c++ templates inheritance visual-c++

我有一个具有模板类型的基类。我明确地重写了子类中的这个模板类型,因为该子类只能在它为其设计的类型上运行。然而,这会导致链接器错误。我在基类中有两个函数,一个是提供的,因为它对所有子类都是通用的。另一个函数纯粹是虚函数,意味着被子类重写。我可以编译和链接第二个函数就好了,但是链接第一个函数会导致错误:

 error LNK2019: unresolved external symbol "public: bool __thiscall BaseDecoder<class APacket>::unpack(class std::vector<unsigned char,class std::allocator<unsigned char> > const &,class std::vector<class Frame,class std::allocator<class Frame> > &)"  

此消息有意义,因为没有BaseDecoder<APacket>实现解包功能,只有BaseDecoder<class PacketType&gt;实施

这是我的班级结构:

基类:

template <class PacketType>
class BaseDecoder {
public:
   BaseDecoder(){};
   virtual ~BaseDecoder(){};

    bool unpack(const std::vector<uint8_t>& traceData, std::vector<Frame>& frameData);
    virtual bool decode(std::vector<Frame>& frameData, std::vector<PacketType>& packetData) = 0;
}

派生类:

class ADecoder : public BaseDecoder<APacket> {
public:
    ADecoder();
    ~ADecoder();

    bool decode(std::vector<Frame>& frameData, std::vector<APacket>& packetData) override;
}

主:

std::vector<uint8_t>* raw_data = getRawData();
std::vector<Frame> frame_data;
a_decoder->BaseDecoder::unpack(*raw_data, frame_data);
std::vector<APacket> a_packets;
a_decoder->decode(frame_data, a_packets);

如何才能将BaseDecoder<APacket> unpack()BaseDecoder<class PacketType> unpack()相关联,因为该功能实际上并未触及模板类型?

0 个答案:

没有答案