您的位置:首页 > 编程语言 > C语言/C++

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++模板所使用的基于签名的隐式约束。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: