Visual C++ 2005新特性之泛型编程

1、两种泛型机制

1)编译时泛型——C++:编译时实例化、基于签名的隐式约束

2)运行时泛型——Visual C++ 2005:运行时实例化、基于“基类+接口”的显式约束

2、三种泛型应用

1)在C++的本地类型上应用模板(编译时泛型)

2)在CLI托管类型上应用模板(编译时泛型)

3)在CLI托管类型尚应用CLI泛型(运行时泛型)

3Visual C++ 2005所支持的泛型程序库

1)标准模板库STL

2CLI标准模板库STL.NET

3CLI泛型库System::Collections::Generic

4CLI泛型基本结构示例

generic <typename T>    //声明一个泛型栈,generic对应templetetypename对应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代码与元数据而并不进行泛型类型的实例化;

2JIT编译时,对第一次遇到的各种泛型类型进行实例化;

3CLI为所有类型参数为ref class的泛型类型产生同一份代码;类型参数为value class时,在针对每一个不同的value classCLI将为其产生一份独立的代码。

6、泛型机制特点

1)由于CLI泛型类型的实例化会推迟到JIT编译阶段进行,因此未经实例化的泛型类型会存在于编译生成的程序集中(assembly),成为一个类型实体;

2)如果实例化泛型类型的参数形同,JIT编译器会重复使用该类型,避免了代码膨胀;

3CLI泛型类型携带有丰富的元数据,因此可以通过反射来获取程序集中的泛型类型的相关信息。

7CLI泛型适用对象

1CLI托管类型(包括引用类型与值类型)

2CLI接口类型

3CLI委托类型

4)函数(成员函数、全局函数)

CLI泛型不适用于C++本地类型(缺乏元数据)、CLI属性、事件、索引器和操作符。

8、类型参数约束

1CLI泛型采用 “基类+接口”来实现对类型参数的显式约束(约束必须写出来);

2CLI泛型不能采用C++模板所使用的基于签名的隐式约束。

posted on 2008-09-04 03:33  开(^_^)心  阅读(253)  评论(0编辑  收藏  举报