模板继承成员字段

Template Inheritance member fields

本文关键字:字段 成员 继承      更新时间:2023-10-16

我有些不明白的地方。

有一个基本模板类:

#ifndef  DBUFFER_HPP
#define  DBUFFER_HPP
#include  <memory>
namespace  memory {
  template <template <typename T, class Alloc = std::allocator<T> > class Stock, class Unit>
  class  DBuffer {
    typedef Stock<Unit> buffer_t;
    protected:
      const std::size_t          m_sizeMax;
      std::unique_ptr<buffer_t>  m_data;
      std::unique_ptr<buffer_t>  m_backData;
    public:
      DBuffer(const std::size_t sizeMax) : m_sizeMax(sizeMax),
                                           m_data(new buffer_t()),
                                           m_backData(new buffer_t()) {}
      virtual ~DBuffer() = default;
    public:
      const buffer_t&  current() { return *m_data; }
      void  swap() { m_data.swap(m_backData); }
  };
}
#endif

我只是想继承它,但是:

#ifndef  VIDEO_BUFFER_HPP
#define  VIDEO_BUFFER_HPP
#include  "dbuffer.hpp"
#include  <deque>
namespace  video {
  template <typename T>
  class  VideoBuffer : public memory::DBuffer<std::deque, T> {
    private:
      static const unsigned int  VIDEO_FPS_MAX = 60;
    public:
      VideoBuffer() : memory::DBuffer<std::deque, T>(VIDEO_FPS_MAX){}
      ~VideoBuffer() = default;
    private:
      void  pop_to_back() {
        m_backData->push_front(std::move(m_data->front()));
        if (m_backData->size() > m_maxSize)
          m_backData->pop_back();
        m_data->pop_front();
      }     
#endif

但唯一的错误是没有在我试图从基类调用的每个成员上声明。

也许我有问题,因为没有指定某些模板类型?

如果有人能解释原因,我将不胜感激。

要继续评论:

您必须将private:替换为protected:才能访问父成员,并通知成员是从属成员名称:(例如使用this->

void  pop_to_back() {
    this->m_backData->push_front(std::move(this->m_data->front()));
    if (this->m_backData->size() > this->m_maxSize)
        this->m_backData->pop_back();
    this->m_data->pop_front();
}