条款47模板局部特化
不能对函数模板进行局部特化,所能做的即使重载它们。
但可以对类模板进行局部特化。
template class Heap; //主模板
template classHeap{…}; //局部特化
局部特化的语法类似完全特化,但是他的模板参数列表是非空的。当使用任何(未经修饰的)指针类型来实例化一个Heap时,这个局部特化版将优先于主模板而被采用。进一步而言...
分类:
编程语言 时间:
2014-06-07 01:46:57
阅读次数:
248
auto_ptr是C++标准库中()为了解决资源泄漏的问题提供的一个智能指针类模板(注意:这只是一种简单的智能指针)auto_ptr的实现原理其实就是RAII,在构造的时候获取资源,在析构的时候释放资源,并进行相关指针操作的重载,使用起来就像普通的指针。std::auto_ptr
pa(new Cl...
分类:
其他好文 时间:
2014-06-02 17:12:02
阅读次数:
210
第一节:vector简介 vector是一种典型的类模板,使用的时候必须进行实例化。 vector的数据存储在数组上,支持随机访问迭代器,支持下标操作[]和at操作,支持手动扩容和自动容量增长。 vector是STL中的最常用容器,并支持STL的通用算法。第二节:vector的迭代器介绍 vecto...
分类:
其他好文 时间:
2014-05-29 09:46:33
阅读次数:
230
类模板:template struct
pair参数:T1是第一个值的数据类型,T2是第二个值的数据类型。功能:pair将一对值组合成一个值,这一对值可以具有不同的数据类型(T1和T2),两个值可以分别用pair的两个公有函数first和second访问。具体用法:1.定义(构造):1
p...
分类:
编程语言 时间:
2014-05-26 17:54:31
阅读次数:
327
模板与泛型编程--模板特化引言: 我们并不总是能够写出对所有可能被实例化的类型都最合适的模板。某些情况下,通用模板定义对于某个类型可能是完全错误的,通用模板定义也许不能编译或者做错误的事情;另外一些情况下,可以利用关于类型的一些特殊知识,编写比从模板实例化来的函数更有效率的函数。 compare函数和 Queue类都是这一问题的好例子:与C风格字符串一起使用进,它们都不能正确工作。 compare...
分类:
编程语言 时间:
2014-05-26 03:15:50
阅读次数:
395
在开发过程中,我们经常需要给类或接口添加public修饰符(默认没有)和一些相关的注释信息,这个工作是机械而枯燥的,而这个简单的需求其实是可以通过修改VS自带的类模板来实现的,下面是详细的修改步骤。
1,找到目录C:\Program Files (x86)\Microsoft Visual Stud...
分类:
其他好文 时间:
2014-05-26 01:56:10
阅读次数:
248
模板与泛型编程--模板特化[续]三、特化成员而不特化类 除了特化整个模板之外,还可以只特化push和pop成员。我们将特化push成员以复制字符数组,并且特化pop成员以释放该副本使用的内存:template<>
void Queue::push(const char *const &val)
{
char *new_item = new char[sizeof(val) + 1];
...
分类:
编程语言 时间:
2014-05-24 14:16:21
阅读次数:
339
模板与泛型编程--一个泛型句柄类引言:【小心地雷】 这个例子体现了C++相当复杂的语言应用,理解它需要很好地理解继承和模板。在熟悉了这些特性之后再研究这个例子也许会帮助。另一方面,这个例子还能很好地测试你对这些特性的理解程度。 前面示例的Sales_item和Query两个类的使用计数的实现是相同的。这类问题非常适合于泛型编程:可以定义类模板管理指针和进行使用计数。原本不相关的Sales_item...
分类:
编程语言 时间:
2014-05-22 22:46:57
阅读次数:
479
模板与泛型编程--类模板成员[续2]六、完整的Queue类Queue的完整定义:template class Queue;
template
ostream &operator &);
template class QueueItem
{
friend class Queue;
friend ostream &
operator(ostream &,const Q...
分类:
编程语言 时间:
2014-05-21 14:07:20
阅读次数:
304
模板与泛型编程--类模板成员[续1]二、非类型形参的模板实参template
class Screen
{
public:
Screen():screen(hi * wid,'#'),
cursor(hi * wid),height(hi),width(wid) {}
//..
private:
std::string screen;
std:...
分类:
编程语言 时间:
2014-05-21 14:00:04
阅读次数:
332