模板继承成员字段

时间:2015-11-19 14:57:45

标签: c++ templates

我有一些我无法理解的东西。

使用一个基本模板类:

#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

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

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

如果有人可以解释原因,我会感激不尽。

1 个答案:

答案 0 :(得分:0)

要恢复评论:

您必须将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();
}