1. 首页
  2. 文档大全

VC++ 2019泛型编程 - PowerPoint Presentation.ppt

上传者:伊利雪糕 2022-06-12 01:04:32上传 PPT文件 435 KB
VC++ 2019泛型编程 - PowerPoint Presentation
文档,文
三级安全培训资料
2006年7月
1
Agenda
C++/CLI泛型编程概览
CLI泛型介绍
CLI泛型适用对象
CLI泛型约束
CLI泛型与C++模板
讲座总结
Q&A
泛型编程简介
所谓泛型,即通过参数化类型来实现在同一份代码上操作多种数据类型。泛型编程是一种编程范式,它利用“参数化类型”将类型抽象化,从而实现更为灵活的复用。
泛型编程意味着一种新的抽象性质,从本质上来讲,它是数据类型的一组需求条件。
(摘自《Generic Programming and the STL》 Matthew H. Austern)
泛型编程不是容器编程!
C++/CLI泛型编程
C++/CLI支持两大泛型机制,三种泛型应用
编译时泛型——ISO-C++模板
编译时实例化
基于签名的隐式约束
运行时泛型——CLI泛型
运行时实例化
基于“基类+接口”的显式约束
C++/CLI三种泛型应用
在ISO-C++本地类型上应用模板(编译时泛型)
在CLI托管类型上应用模板(编译时泛型)
在CLI托管类型上应用CLI泛型(运行时泛型)
C++/CLI所支持的泛型程序库
标准模板库 STL
CLI标准模板库 STL.NET
CLI泛型库 System::Collections::Generic
初识CLI泛型
generic <typename T> // 声明一个泛型栈
public ref class Stack {
public:
T Pop();
void Push(T t);
int Size();
...
};
Stack<String^> ^ sStack; // 使用String^ 实例化泛型栈
Stack<int> ^ iStack; //使用int实例化泛型栈
了解CLI泛型机制
第一轮编译时,编译器只为Stack<T>类型产生“泛型版”的IL代码与元数据——并不进行泛型类型的实例化,T在中间只充当占位符
JIT编译时,当JIT编译器第一次遇到Stack<String^>时,将用String^替换“泛型版”IL代码与元数据中的T——进行泛型类型的实例化。
CLI为所有类型参数为ref class的泛型类型产生同一份代码;但是如果类型参数为value class,针对每一个不同的value class,CLI将为其产生一份独立的代码
CLI泛型机制特点
由于CLI泛型类型的实例化会推迟到JIT编译阶段进行,因此未经实例化的泛型类型会存在于编译生成的程序集(assembly)中,成为一个类型实体
如果实例化泛型类型的参数相同,那么JIT编译器会重复使用该类型,因此CLI泛型可以避免C++模板可能导致的代码膨胀问题。
CLI泛型类型携带有丰富的元数据,因此可以通过反射来获取程序集中的泛型类型的相关信息
CLI泛型委托
//泛型委托
generic <typename ItemType>
delegate void MyDelegate (ItemType p1);
ref struct MyClass {
void MyMethod(int p1) { Console::WriteLine(p1); }
};
MyClass^ myObject = gcnew MyClass();
MyDelegate<int>^ myDelegate = gcnew MyDelegate<int>(myObject, &MyClass::MyMethod);
myDelegate(200);
CLI泛型函数
//泛型成员函数
ref struct MyClass {
generic <class T>
void MyMethod(T t){ Console::WriteLine(t); }
};
//泛型全局函数
generic <class T>
void MyGlobalFunction(T t) { Console::WriteLine(t);}
MyClass^ myObj = gcnew MyClass();
myObj->MyMethod<int>(200);
MyGlobalFunction<String^>("Hello");

VC++ 2019泛型编程 - PowerPoint Presentation


文档来源:https://www.taodocs.com/p-690398690.html

文档标签:

下载地址