一、泛型编程的一些基本 :

  1、泛型程序设计:

    1.1、程序尽可能的通用。

    1.2、将算法从数据结构中抽象出来,成为通用。

    1.3、模板并不是单纯的函数,不能凭空的生成,是用来产生代码的代码,可以减少代码量。

    1.4、template<> 中不要使用class, 使用typename;

    1.5、模板编程与宏的区别:
        宏是在编译时替换,而模板是在编译时生成。

    1.6、通过函数模板写的模板函数,在实例化的时候生成了很多的代码。

      template<typename T> //函数模板
      const T& Max()  //模板函数:在编译时实例化(非运时)
      {}

    1.7、模板在实例化时有两个步骤:

        1、检查语法错误;

        2、检查调用错误; 通过了语法检测之后, 生成对应的函数来进行调用检查。

    1.8、模板的声明和定义不能放在不同的文件,包含也不行。 在声明的时候模板函数的名字已经改变了,
        所以找不到定义。

    1.9、模板参数列表, 必须在函数参数列表中使用至少一次。类模板是无法推导的。 所以在类中是可以不用 T 类型。

    1.10、模板函数是可以构成重载的,

       1.10.1、条件:
        1、函数模板参数不同。
        2、模板函数参数列表不同。

       1.10.2、模板函数还可以和普通函数构成重载。

       1.10.3、在函数模板中的重载是不能提升转换的。

    1.11、

template<typename T, int num> : num 必须传递一个确定的值。 因为是编译时(非运行时)确定的。

    1.12、特化:

      1.12.1、函数模板的特化:

        1、

template<> // 特殊化,当函数模板的 T = const char*; 的时候就不用生成了。
const char* Max(const char* lhs, const char* rhs)
{
return strcmp(lhs, rhs) > 0 ? lhs : rhs;
}

        如果通篇没有使用到这个特化是不会生成的。

        2、调用规则:首先调用非模板函数(提升转化) -> 特化 -> 模板函数所生成的函数。

      1.12.2、类的特化:

        1、类的特化(就是直接给定类型):

template<>
class Array<int *>
{}

        和函数的特化是一样的;

template<typename T> 特化:template<>
void Foo()        void Foo<int>()
{}             {}

        2、类的特化并不是继承, 两者没有任何关系, 是两个类。

    1.12.3、模板类在编译的时候会生成,
        如果对某个模板类进行了特化,那他就不会生成。所有的代码都是自己写的,
        就相当于一个全新的类。

    1.12.4、偏特化:

template<>        // 就是对部分成员的特化。不是模板函数全特化。
Array<int *>::Array() // 特化的只是部分的方法,其余的代码编译器还是会
{}            // 帮你生成。而进行了偏特化的代码就不会帮你生成了。

    1.12.5、最大可能会对指针类型进行特化,因为不进行特化的话只会进行浅拷贝,这可能不符合需求。

  1.13、模板类中的成员函数还可以做为模板函数。 另外模板类之间可以进行继承。

template<typename T>
classMyType
{
public:
template<typename X> //模板类中的函数模板
void Assign(X other) //模板类中的模板函数
{}
};
类外定义:
template<typename T> //注意顺序
template<typename X>
void classMyType<T>::Assign(X other)
{}

stl_泛型的一些基本的更多相关文章

  1. 一起学 Java(三) 集合框架、数据结构、泛型

    一.Java 集合框架 集合框架是一个用来代表和操纵集合的统一架构.所有的集合框架都包含如下内容: 接口:是代表集合的抽象数据类型.接口允许集合独立操纵其代表的细节.在面向对象的语言,接口通常形成一个 ...

  2. .NET面试题系列[8] - 泛型

    “可变性是以一种类型安全的方式,将一个对象作为另一个对象来使用.“ - Jon Skeet .NET面试题系列目录 .NET面试题系列[1] - .NET框架基础知识(1) .NET面试题系列[2] ...

  3. C#4.0泛型的协变,逆变深入剖析

    C#4.0中有一个新特性:协变与逆变.可能很多人在开发过程中不常用到,但是深入的了解他们,肯定是有好处的. 协变和逆变体现在泛型的接口和委托上面,也就是对泛型参数的声明,可以声明为协变,或者逆变.什么 ...

  4. 编写高质量代码:改善Java程序的151个建议(第7章:泛型和反射___建议106~109)

    建议106:动态代理可以使代理模式更加灵活 Java的反射框架提供了动态代理(Dynamic Proxy)机制,允许在运行期对目标类生成代理,避免重复开发.我们知道一个静态代理是通过主题角色(Prox ...

  5. 6.在MVC中使用泛型仓储模式和依赖注入实现增删查改

    原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-operations-using-the-generic-repository-pat ...

  6. C#泛型详解(转)

    初步理解泛型: http://www.cnblogs.com/wilber2013/p/4291435.html 泛型中的类型约束和类型推断 http://www.cnblogs.com/wilber ...

  7. C# 泛型

    C# 泛型 1.定义泛型类 在类定义中包含尖括号语法,即可创建泛型类: class MyGenericClass<T> { //Add code } 其中T可以遵循C#命名规则的任意字符. ...

  8. java8中lambda表达式的应用,以及一些泛型相关

    语法部分就不写了,我们直接抛出一个实际问题,看看java8的这些新特性究竟能给我们带来哪些便利 顺带用到一些泛型编程,一切都是为了简化代码 场景: 一个数据类,用于记录职工信息 public clas ...

  9. java 泛型

    1.Student stu =tool.getObj();右边得到的是Object类型,需要向下转型,强转换. 2. 3. 4.泛型方法不能被静态修饰这样写 5.如果想定义定义静态泛型方法,只能这样写 ...

随机推荐

  1. nodejs第二天之Buffer类

    2.1一个更好的操作二进制数据的类,我们在操作文件或者网络数据的时候,其实操作就是二进制数据,Node为我们提供了一个更加方便去操作这种数据流的类Buffer,它是一个全局的类. 2.2三种调用方式 ...

  2. JAVA高级总结

    一.集合框架和泛型 1.集合框架 1) 定义:JAVA API的一部分,用于处理一组长度可变得数据. 2) 和数组的区别: 数组的长度不可变,但是集合框架处理的数据长度可以动态变化. 3) 结构: 接 ...

  3. 会话控制之session和cookie(20161107)

    注:除了登录页面,每个页面,包括处理页面也要加,为了提高安全性 session尽量不用,因为很占内存 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML ...

  4. 梳理下Cordova的热更新

    公司的大部分都是Hybrid 产品,也就是混合开发,所以比较重要的一个核心功能就是热更新了. 做这个功能的时候中间碰到不少坑,记录一下,比较简单,大致思想就是从服务器拉取JS文件替换掉本地对应文件 之 ...

  5. 读书笔记 effective c++ Item 36 永远不要重新定义继承而来的非虚函数

    1. 为什么不要重新定义继承而来的非虚函数——实际论证 假设我告诉你一个类D public继承类B,在类B中定义了一个public成员函数mf.Mf的参数和返回类型并不重要,所以假设它们都是void. ...

  6. Tcl与Design Compiler (三)——DC综合的流程

    本文属于原创手打(有参考文献),如果有错,欢迎留言更正:此外,转载请标明出处 http://www.cnblogs.com/IClearner/  ,作者:IC_learner 1.基本流程概述 首先 ...

  7. WIMP环境搭建

    h1 { color: #3366ff } p { font-size: 16px } body { background-color: rgb(200,200,169) } 环境说明 系统:wind ...

  8. 初窥DB2之insert语句

    第一种写法 INSERT INTO PERSVALUES (12, 'Harris', 20, 'Sales', 5, 18000, 1000, '1950-1-1') 第二种写法 INSERT IN ...

  9. [SinGuLaRiTy] COCI 2011~2012 #2

    [SinGuLaRiTy-1008] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. 测试题目 对于所有的题目:Time Limit:1s   ...

  10. [转]使用sklearn进行集成学习——理论

    转:http://www.cnblogs.com/jasonfreak/p/5657196.html 目录 1 前言2 集成学习是什么?3 偏差和方差 3.1 模型的偏差和方差是什么? 3.2 bag ...