本文实例讲述了C++模板类的用法,分享给大家供大家参考。具体实现方法如下:
main.h头文件如下:
template <class T> class actioncontainer { public: //构造函数 actioncontainer() { m_nRedoPos = 0; m_nUndoPos = 0; } //容器的接口函数 void add(T value); T redo(); T undo(); //容器的属性 private: int m_nRedoPos; int m_nUndoPos; const static int ACTION_SIZE=5; T m_RedoAction[ACTION_SIZE]; T m_UndoAction[ACTION_SIZE]; }; template<class T> void actioncontainer<T>::add(T value) { if (m_nUndoPos >= ACTION_SIZE) { //如果容器已潢,刚调整添加位置 m_nUndoPos = ACTION_SIZE - 1; for(int i = 0; i < ACTION_SIZE; i++) { m_UndoAction[i] = m_UndoAction[i+1]; } } m_UndoAction[m_nUndoPos++] = value; } template<class T> T actioncontainer<T>::redo() { //将恢复动作复制到撤销数组中 m_UndoAction[m_nUndoPos++] = m_RedoAction[--m_nRedoPos]; //返回恢复的动作 return m_RedoAction[m_nRedoPos]; } template<class T> T actioncontainer<T>::undo() { m_RedoAction[m_nRedoPos++] = m_UndoAction[--m_nUndoPos]; return m_UndoAction[m_nUndoPos]; }
main.cpp源文件如下:
// test_iostream.cpp : 定义控制台应用程序的入口点。 // #include "StdAfx.h" #include "main.h" using namespace std; int _tmain(int argc, _TCHAR* argv[]) { actioncontainer<int> intaction; //向容器中加动作 intaction.add(1); intaction.add(2); intaction.add(3); intaction.add(4); //撤销上一步动作 int nUndo = intaction.undo(); nUndo = intaction.undo(); //恢复 int nRedo = intaction.redo(); return 0; }
希望本文所述对大家的C++程序设计有所帮助。
在C++11之前,类模板和函数模板只能含有固定数量的模板参数。C++11增强了模板功能,允许模板定义中包含0到任意个模板参数,这就是可变参数模板。可变参数模板的加入使得C++11的功能变得更加强大,而由此也带来了许多神奇的用法。 可变参数模板 可变参数模板和普通模板的语义是一样的,只是写法上稍有区别,声明可变参数模板时需要在typename或class后面带上省略号...: template<ty
我是新使用模板。作为标题,我有一个非模板类(Obj和ObjBase)和一个模板类pitem。我想让pItem::RefValue()访问obj中的私有成员。 我想下面的行得通: 它不: 错误C2248:“obj::GetValue”:无法访问类“obj”中声明的私有成员 注意:请参阅对正在编译的函数模板实例化“int PItem::GetValue(void)”的引用 编译器投诉:
模板是泛型编程的基础,它涉及以独立于任何特定类型的方式编写代码。 模板是用于创建泛型类或函数的蓝图或公式。 像迭代器和算法这样的库容器是通用编程的示例,并且是使用模板概念开发的。 每个容器都有一个定义,例如vector ,但我们可以定义许多不同类型的向量,例如vector 《int》或vector 《string》 。 您可以使用模板来定义函数和类,让我们看看它们是如何工作的 - 功能模板 此处显
模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码。 模板是创建泛型类或函数的蓝图或公式。库容器,比如迭代器和算法,都是泛型编程的例子,它们都使用了模板的概念。 每个容器都有一个单一的定义,比如 向量,我们可以定义许多不同类型的向量,比如 vector <int> 或 vector <string>。 您可以使用模板来定义函数和类,接下来让我们一起来看看如何使用。 函数模板 模
本文向大家介绍C++函数模板与类模板实例解析,包括了C++函数模板与类模板实例解析的使用技巧和注意事项,需要的朋友参考一下 本文针对C++函数模板与类模板进行了较为详尽的实例解析,有助于帮助读者加深对C++函数模板与类模板的理解。具体内容如下: 泛型编程(Generic Programming)是一种编程范式,通过将类型参数化来实现在同一份代码上操作多种数据类型,泛型是一般化并可重复使用的意思。泛
主要内容:使用类模板创建对象,综合示例C++ 除了支持 函数模板,还支持 类模板(Class Template)。函数模板中定义的类型参数可以用在函数声明和函数定义中,类模板中定义的类型参数可以用在类声明和类实现中。类模板的目的同样是将数据的类型参数化。 声明类模板的语法为: template<typename 类型参数1 , typename 类型参数2 , …> class 类名{ //TODO: }; 类模板和函数模板都