C++ template
Cry .
当你的能力配得上你的野心、梦想的时候,运气自然就会来了。
展开
-
c++ template(二)
与函数相似,类也可以被一种或者多种类型参数化。现在就让让我们看个简单的列子#include<iostream>#include<vector>template<typename T>class Stack {public: void push(const T& elem); void pop();private: std::v...原创 2019-05-03 10:03:44 · 611 阅读 · 0 评论 -
c++ template(一)
函数模板提供了一种函数行为,该函数行为可以表示成多种类型进行调用,也就是说函数模板表时一个函数家族。那函数模板要怎么写呢?template<typename T>T max(const T& t1, const T& t2) { return t1 > t2 ? t1 : t2;}函数模板有两种类型的参数:模板参数:template&...原创 2019-05-05 08:57:51 · 1424 阅读 · 0 评论 -
C++ template(四)
1.为什么成员函数模板实例化的产生的函数不能是虚函数?答:虚函数调用机制的实现使用了虚函数表(函数指针数组),成员函数模板的实例化个数,要等到整个程序翻译完毕之后才能确定(也就是说模板的实例化,其实是模板的声明的实例化,而模板的成员函数的实体并没有实例化,当调用时才实例化),但是虚函数表的大小是固定的(编译时期虚表的大小就要确定),因此发生了冲突。2.为什么要使用typename,如果要使...原创 2019-05-13 21:27:05 · 98 阅读 · 0 评论 -
c++ template(五)——友元
在学习c++类时我们学习了——友元。现在简单复习一下c++中的友元。首先我们要清楚友元的概念:某个类或者函数访问友元声明所在的类。也就时说在某个类中声明一个友元函数或者友元函数具有访问这个类的权限。然而,由于以下两个事实,这些简单的概念却变得复杂:友元声明可能是某个实体的唯一声明。 友元函数的声明可以是一个定义。 友元类的声明不能是类定义。 class Stack_;class ...原创 2019-05-13 22:25:54 · 149 阅读 · 0 评论 -
c++ template(七)——静态多态与动态多态
在面向对象的程序设计中,多态可以说是一块基石。在c++中这块基石主要是通过继承和虚函数来实现的,由于这两个机制(继承和虚函数)可能都是运行期进行处理的,因此我们把这种多态称为动态多态。模板中也存在多态机制,但是却不是动态多态,而是静态多态。模板中静态多态简单的理解就是在编译器进行处理,而不是运行期。在学习静态多态之前,先让我们回顾一下动态多态。 动态多态的设计思想:对于几个相关的对象模型,确...原创 2019-05-15 00:39:11 · 1879 阅读 · 0 评论 -
c++ template(八)——trait模板与policy类
模板的神奇之处就在于我们可以针对多种类型对类和函数进行参数化,但有时候为了解决一些问题,我们需要引入较多的参数,这样就显得很麻烦?有什么好的解决方法呢? 这是有人会想,对一些额外的参数指定缺省值就行了啊,当然可以啊!但是过多的缺省值使我们的代码也会显的很麻烦,有时候可能会出现效率低下的问题。因此,我们引入了trait模板机制和policy类来解决这个问题。 policy类和trait模板机制,是...原创 2019-05-15 10:59:56 · 510 阅读 · 0 评论 -
c++ template(三)
对于函数模板和类模板的参数并不局限于类型,普通值也可以作为模板的参数。那非类型的模板形参有什么用呢?在什么情况下我们要使用非类型的模板形参呢?答:当我们构建栈模板时,为了更好的使用栈模板,我们可以让用户自定义栈的大小。也就是说在一些特定的情况下,为了满足要求必须让用户自定义一些所设计的东西的大小,这时候我们就需要为模板指定非类型的参数。首先我们先来看看类模板的非类型模板实参templat...原创 2019-05-13 00:22:38 · 286 阅读 · 0 评论