Visual C++ 2005 系列课程学习笔记-9
2008-09-04 03:33
351 查看
Visual C++ 2005新特性之泛型编程
1、两种泛型机制
(1)编译时泛型——C++:编译时实例化、基于签名的隐式约束
(2)运行时泛型——Visual C++ 2005:运行时实例化、基于“基类+接口”的显式约束
2、三种泛型应用
(1)在C++的本地类型上应用模板(编译时泛型)
(2)在CLI托管类型上应用模板(编译时泛型)
(3)在CLI托管类型尚应用CLI泛型(运行时泛型)
3、Visual C++ 2005所支持的泛型程序库
(1)标准模板库STL
(2)CLI标准模板库STL.NET
(3)CLI泛型库System::Collections::Generic
4、CLI泛型基本结构示例
generic <typename T> //声明一个泛型栈,generic对应templete,typename对应class
public ref class Stack
{
public:
T Pop();
void Push(T t);
int Size();
…
}
Stack<String^>^ sStack; //使用String^实例化泛型栈
Stack<int>^ iStack; //使用int实例化泛型栈
5、泛型机制
(1)第一轮编译时,只产生“泛型版”的IL代码与元数据而并不进行泛型类型的实例化;
(2)JIT编译时,对第一次遇到的各种泛型类型进行实例化;
(3)CLI为所有类型参数为ref class的泛型类型产生同一份代码;类型参数为value class时,在针对每一个不同的value class,CLI将为其产生一份独立的代码。
6、泛型机制特点
(1)由于CLI泛型类型的实例化会推迟到JIT编译阶段进行,因此未经实例化的泛型类型会存在于编译生成的程序集中(assembly),成为一个类型实体;
(2)如果实例化泛型类型的参数形同,JIT编译器会重复使用该类型,避免了代码膨胀;
(3)CLI泛型类型携带有丰富的元数据,因此可以通过反射来获取程序集中的泛型类型的相关信息。
7、CLI泛型适用对象
(1)CLI托管类型(包括引用类型与值类型)
(2)CLI接口类型
(3)CLI委托类型
(4)函数(成员函数、全局函数)
CLI泛型不适用于C++本地类型(缺乏元数据)、CLI属性、事件、索引器和操作符。
8、类型参数约束
(1)CLI泛型采用 “基类+接口”来实现对类型参数的显式约束(约束必须写出来);
(2)CLI泛型不能采用C++模板所使用的基于签名的隐式约束。
1、两种泛型机制
(1)编译时泛型——C++:编译时实例化、基于签名的隐式约束
(2)运行时泛型——Visual C++ 2005:运行时实例化、基于“基类+接口”的显式约束
2、三种泛型应用
(1)在C++的本地类型上应用模板(编译时泛型)
(2)在CLI托管类型上应用模板(编译时泛型)
(3)在CLI托管类型尚应用CLI泛型(运行时泛型)
3、Visual C++ 2005所支持的泛型程序库
(1)标准模板库STL
(2)CLI标准模板库STL.NET
(3)CLI泛型库System::Collections::Generic
4、CLI泛型基本结构示例
generic <typename T> //声明一个泛型栈,generic对应templete,typename对应class
public ref class Stack
{
public:
T Pop();
void Push(T t);
int Size();
…
}
Stack<String^>^ sStack; //使用String^实例化泛型栈
Stack<int>^ iStack; //使用int实例化泛型栈
5、泛型机制
(1)第一轮编译时,只产生“泛型版”的IL代码与元数据而并不进行泛型类型的实例化;
(2)JIT编译时,对第一次遇到的各种泛型类型进行实例化;
(3)CLI为所有类型参数为ref class的泛型类型产生同一份代码;类型参数为value class时,在针对每一个不同的value class,CLI将为其产生一份独立的代码。
6、泛型机制特点
(1)由于CLI泛型类型的实例化会推迟到JIT编译阶段进行,因此未经实例化的泛型类型会存在于编译生成的程序集中(assembly),成为一个类型实体;
(2)如果实例化泛型类型的参数形同,JIT编译器会重复使用该类型,避免了代码膨胀;
(3)CLI泛型类型携带有丰富的元数据,因此可以通过反射来获取程序集中的泛型类型的相关信息。
7、CLI泛型适用对象
(1)CLI托管类型(包括引用类型与值类型)
(2)CLI接口类型
(3)CLI委托类型
(4)函数(成员函数、全局函数)
CLI泛型不适用于C++本地类型(缺乏元数据)、CLI属性、事件、索引器和操作符。
8、类型参数约束
(1)CLI泛型采用 “基类+接口”来实现对类型参数的显式约束(约束必须写出来);
(2)CLI泛型不能采用C++模板所使用的基于签名的隐式约束。
相关文章推荐
- Visual C++ 2005 系列课程学习笔记-7
- Visual C++ 2005 系列课程学习笔记-8
- Visual C++ 2005 系列课程学习笔记-1
- Visual C++ 2005 系列课程学习笔记-2
- Visual C++ 2005 系列课程学习笔记-3
- Visual C++ 2005 系列课程学习笔记-4
- Visual C++ 2005 系列课程学习笔记-6
- Visual C++ 2005 系列课程学习笔记-5
- sql server 2005下载|学习|教程|笔记系列文章
- Andrew NG机器学习课程笔记系列之——机器学习之神经网络模型-下(Neural Networks: Representation)
- NodeJS学习系列课程笔记(NodeJs 快速上手+用法示例)
- NodeJS学习系列课程笔记(NodeJs REPL相关使用方法)
- AI角 | 把吴恩达深度学习系列课程画出来,这有份诚意满满的笔记求查收
- SQL Server 2005盛宴系列之一:SQL Server 2005产品简介-----学习笔记
- 【学习】构建WCF面向服务的应用程序系列课程笔记:(1) WCF概要
- 1自定义View系列课程学习笔记——之手势处理
- SQL Server 2005 学习笔记系列文章导航
- NodeJS学习系列课程笔记(NodeJs Stream 的相关使用方法)
- NodeJS学习系列课程笔记(NodeJs EventEmitter相关使用方法)
- 3自定义View系列课程学习笔记——之Measure测量