我有一些我无法理解的东西。
使用一个基本模板类:
#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
但唯一的错误是我试图从基类调用的每个成员都没有声明。
也许我有问题,因为没有指定某些模板类型?
如果有人可以解释原因,我会感激不尽。
答案 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();
}