结合模板和继承
Combine template and inheritance
我有一个任务来实现几种容器的模板方式在c++中。所有这些容器都应该提供具有各种重载操作符的迭代器。我对模板很陌生,事实上这将是我在这个主题上的第一个真正的项目。
我的问题是:在这种情况下,使用带有继承的模板是个好主意吗?容器和迭代器都可以这样做吗?如果是这样,我应该注意什么?我不应该做什么?如有任何帮助,我将不胜感激。
继承和模板都不是目标,而且都不好或者本身就是坏的。问题是:你在尝试解决什么问题解决吗?根据a中包含的类型的区别容器应该由模板制作:没有好的如果返回类型是由继承处理的,则返回类型的解决方案。如何管理容器,推进迭代器和结尾的测试是继承的好候选项,但是这在某种程度上还是取决于设计。
你走错方向了。首先创建一些您认为可以工作的替代方案(使用和不使用继承),然后比较它们的优缺点。
或者如果你想不出一方,那你的问题就结束了。
如果你是模板的新手,我建议从typedef int VALTYPE;
开始,并使用它作为常规类实现容器。测试它,当你完成后,你可以替换介绍,使它将是模板和VALTYPE参数。
在你开始重新发明轮子之前,你应该看看标准和boost中的容器(多索引,指针容器库,图形,…),并尝试适应一个。
您应该从编写更简单的容器开始:堆栈。这很简单,因为堆栈不需要交互器。
我给你写了一个在std::list之上实现的栈的小例子,有一些继承。
试着先写你自己的,但如果你想的话,你可以把这个作为一个例子。
#include <iostream>
#include <list>
/* Here mainly to demonstrate inheritance by providing a stack interface */
template<typename T>
class IStack
{
public:
virtual void push(const T &i) = 0;
virtual T& pop() = 0;
};
template<typename T>
class Stack : public IStack<T>
{
private:
std::list<T> _internal;
public:
virtual void push(const T &i)
{
_internal.push_back(i);
}
virtual T& pop()
{
T& tmp = _internal.back();
_internal.pop_back();
return tmp;
}
};
编辑:重命名的基于类,由James指出。
相关文章:
- 继承函数的重载解析
- 多态性和功能结合
- 继承期间显示未知行为的子类
- 头文件-继承c++
- 为什么在保护模式下继承升级不起作用
- 通过继承类使用来自不同命名空间的运算符
- 子目录是否继承属性,例如add_definitions,include_directories和父Cmakelist.t
- 混合组合和继承的C++问题
- 继承:构造函数,初始化C++11中基类的类C数组成员
- 从类继承时,继承的类是否会通过父类重新定义继承的变量
- 公共与私人继承
- 如何创建从同一类继承的不同对象的向量
- 所有版本的 GCC 都与默认成员初始值设定项作斗争,该初始值设定项捕获了这一点,并结合了继承的构造函数
- 结构绑定:与公共数据成员(继承的基类)结合
- 将继承与静态函数结合使用
- 在树转换中结合模板和继承
- 将非虚拟接口和多级继承结合在一起
- 关于const与引用和虚继承的结合
- 结合模板和继承
- 是否可以将友谊与继承结合起来访问私有数据成员?