`
isiqi
  • 浏览: 16033291 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

模板(C++编程思想第二卷)

阅读更多

一、无类型模板参数

一个无类型模板参数必须是一个编译时所知的整数值。举个例子,可以创建一个固定长度的Stack,指定一个无类型参数作为其中基础数组的大小

template<class T, size_t N> class Stack
{
T data[N];
size_t count;
};

当需要这个模板的一个实例时,必须为参数N提供一个编译时常数值,例如:

Stack<int, 100> myfixedStack;

二、默认模板参数

在类模板中,可以为模板参数提供默认(缺省)参数,但是在函数模板中却不行。作为默认的模板参数,它们只能被 定义一次,编译器会知道第一次的模板声明或定义。一旦引入了一个默认参数,所有它之后的模板参数也必须具有默认值。

template<class = int, size_t N = 100> class Stack
{
T data[N];
size_t count;
};

三、模板类型的模板参数

模板可以接受的第3种模板参数类型是另一个类模板。如果想在代码中将一个模板类参数用作另一个模板,编译器首先需要知道这个参数是一个模板。下面的例子说明了一个模板类型的模板参数:

#include <cstddef>
#include <iostream>
using namespace std;

template<class T>
class Array
{
enum {INIT = 10 };
T* data;
size_t capacity;
size_t count;
public:
Array()
{
count = 0;
data = new T[capacity = INIT];
}
~Array()
{
delete []data;
}
void push_back(const T& t)
{
if(count == capacity)
{
size_t newCap = 2 * capacity;
T* newData = new T[newCap];
for(size_t i=0; i< count; i++)
{
newData[i] = data[i];
}
delete []data;
data = newData;
capacity = newCap;
}
data[count++] = t;
}

void pop_back()
{
if(count > 0)
{
--count;
}
}

T* begin() { return data; }
T* end() { return data+count; }
};

template<class T, template<class> class Seq>
class Container
{
Seq<T> seq;
public:
void append(const T& t){seq.push_back(t); }
T* begin(){return seq.begin(); }
T* end() {return seq.end(); }
};

void TestContainer()
{
Container<int, Array> container;
container.append(1);
container.append(2);
int* p = container.begin();
while(p != container.end())
{
cout<<*p++<<endl;
}
}

分享到:
评论

相关推荐

    C++编程思想(第二卷)

    C++编程思想(第二卷) 《C++编程思想》(第2卷)介绍C++实用的编程技术和最佳的实践方法,深入探究了异常处理方法和异常安全设计;介绍C++的字符串、输入输出流、 STL算法、容器和模板的现代用法,包括模板元编程;解释...

    C++编程思想第二卷

    C++编程思想第二卷.C++ 模板思想.

    C++编程思想 第2卷:实用编程技术(Bruce Eckel著)

    也是作者Bruce Eckel继Jolt大奖《Java编程思想:第3版》 的又一力作! 本书内容: ·介绍实用的编程技术和最佳的实践方法,解决C++开发中最困难的课题 ·深入研究标准C++库的功能,包括:字符串、输入输出流、STL...

    c++编程思想第二卷

    c++编程思想第二卷,英文版的,挺不错的!讲述了stl模板库还有异常处理等

    c++编程思想第二卷.pdf

    c++编程思想第二卷是提高卷,对于模板,string等都有很详细的解说,不错的书!

    C++编程思想(第2版 第2卷)

    C++编程思想 第二版 第二卷 中文 本书介绍C++实用的编程技术和最佳的实践方法,深入探究了异常处理方法和异常安全设计;介绍C++的字符串、输入输出流、STL算法、容器和模板的现代用法,包括模板元编程;解释多重继承...

    C++编程思想(Thinking in C++)完美版pdf

    第二部分 标准C++库 第3章 深入理解字符串 第4章 输入输出流 第5章 深入理解模板 第6章 通用算法 第7章 通用容器 第三部分 专题 第8章 运行时类型识别 第9章 多重继承 第10章 设计模式 第11章 并发 附录 附录A 推荐...

    C++编程思想(中文版pdf高清)(1,2卷)

    介绍C++的字符串、输入输出流、STL算法、容器和模板的现代用法,包括模板元编程;解释多重继承问题的难点,展示RTTI的实际使用,描述了典型的设计模式及其实现,特别介绍被认为是标准C++下一版特征之一的多线程处理...

    C++编程思想之第2卷

    第二部分 标准C++库 第3章 深入理解字符串 第4章 输入输出流 第5章 深入理解模板 第6章 通用算法 第7章 通用容器 第三部分 专题 第8章 运行时类型识别 第9章 多重继承 第10章 设计模式 第11章 并发 附录 附录A 推荐...

    编程思想第二卷 PDF

    本书介绍C++实用的编程技术和最佳的实践方法,深入探究了异常处理方法和异常安全设计;介绍C++的字符串、输入输出流、STL算法、容器和模板的现代用法,包括模板元编程

    77G 22套C语言 C++ 数据结构 程序设计视频课程合集 C丨C++相关学习视频全套视频教程

    C++ 编程思想 第1卷 1.对象导言.mp4 10.友元.mp4 11.句柄类.mp4 12.初始化与清除_1.mp4 13.初始化与清除_2.mp4 14.函数重载.mp4 15.联合.mp4 16.默认参数.mp4 17.默认参数还是函数重载.mp4 18.常量_1....

Global site tag (gtag.js) - Google Analytics