模板继承成员字段
Template Inheritance member fields
我有些不明白的地方。
有一个基本模板类:
#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();
}
相关文章:
- C++:用户定义的类,以成员字段作为地址
- 用于基于成员字段或函数创建比较器的快捷方式
- 无法初始化以 std::byte 作为成员类型的位字段
- 与位字段的并集为位字段成员提供了意外值
- 依赖注入:依赖关系需求字段/成员
- uninit_member:非静态类成员字段 m_cJobState.bstatus 未在此构造函数中初始化,也不在其调
- 派生类中的成员字段别名(无访问器功能)
- 使用静态类成员而不是私有字段之间的速度差异是什么?
- 如何使用 Clang 查找所有成员字段读/写?
- 位字段成员的类型
- 无法汇总初始化类型结构的变量,其中包含在类模板中的位字段成员
- C 模板功能在任何集合成员字段上迭代
- 一次启用 MANY 类的成员字段,具体取决于模板<T>
- 导致IAR ARM中出现错误的成员结构位字段元素的Initializer列表初始化
- 如何在C++的专用模板类中访问模板类成员字段
- 动态链接到 c++ 静态成员字段时符号查找失败
- std :: async在成员字段的成员功能上
- C :初始化成员结构的静态字段的正确方法
- 位字段成员的大小
- 如何为具有位字段成员的类专门化“swap”