結合泛型與模板的STL.NET探索
2006/11/29 9:52:17
開始之前,先來看一個笑話,當問一個C++程序員怎樣完成一個給定的任務時,他(她)可能會提供一打或更多的潛在解決方案列表,但又會極其詳細地標出每種方案的問題之處,讓你不知所措,難以選擇。而Visual C++ 2005,通過C++/CLI語言聯編,引入了泛型的概念,使C++程序員可進一步提高程序的開發效率。關于 .NET泛型與C++模板,盡管句法上很相似,但泛型與模板是以完全不同的方法實現的,它們之間沒有任何的內置兼容性。

  說到泛型與模板的差別,相信每個 .NET平臺的C++程序員都會問這個問題:我該選擇哪種技術呢?那些已用C++進行了數年開發(特別是用Visual C++)的人,相信早已知道答案:兩種技術都具有卓越的特性,但任何一者都不是另一者的超集,使用何種技術只限于給定的任務,簡而言之,沒有一種技術可以適用于所有情況下的解決方案。同樣,這種進退兩難的狀況也折磨了Visual C++程序員數年:Win32或是MFC、ATL或是WTL、COM或是C風格的DLL、#import或是CComPtr。

  涉及 .NET開發的C++知識

  在過去,Visual C++利用某些技術手段,可使STL中的集合與其他技術協同工作,如在活動模板庫(ATL)中稱為CComEnuOnSTL的模板化類,它允許一個Visual Basic客戶端使用For Each來枚舉由C++ COM服務器提供的STL集合的內容。雖然這種層次上的集成非常之淺,但在許多受限情況下證實非常有用。基于同樣的主旨,STL.NET為C++程序員提供了標準STL庫的一種擴展,這種擴展可允許在一個C++/CLI程序集內部使用的STL集合,作為泛型集合暴露給其他的 .NET程序集。

  STL.NET提供了與標準STL集合相同的接口,因此,對熟悉標準STL集合與算法的C++程序員來說,不存在學習曲線。以Visual C++ 2005來作說明,STL.NET的頭文件位于Cliext目錄中,如果要使用STL.NET集合,例如vector,必須包含<cliext/vector>而不是標準的<vector>,另外,STL.NET集合包含在cliext命名空間中,而不是標準STL集合所使用的std命名空間。

  注:Visual C++開發小組仍在努力工作使STL.NET變得更易使用,并提高它的性能。因為STL.NET仍在不斷地進行新的改進,本文將不會探討STL.NET集合的過深之處,而會從一種更高的角度來看,為什么STL.NET將會大有作為。

  橋接泛型與模板

  橋接泛型與模板這兩個不同的世界,實屬一項艱巨的任務。模板只是一個C++的概念,并只存在于編譯時期;然而,泛型是一個 .NET概念,它存在于已編譯的程序集中,并對所有 .NET語言可用。STL.NET所使用的解決方案是把類集當作C++模板類來實現,同時C++模板類也是 .NET引用類型,并由其實現了ICollection泛型接口。STL與STL.NET中vector的聲明演示了這種設計:

    //STL vector 聲明
template<class _Ty, class _Ax = allocator<_Ty> >
class vector;

//STL.NET vector 聲明
template<typename _Value_t>
ref class vector : Generic::ICollection<_Value_t>
  在這兩者的聲明當中,有一些關鍵的不同之處,除泛型接口的實現之外,STL.NET vector并不能指定一個分配算符,只是簡單地調用gcnew來分配一個新的所需元素。STL.NET集合聲明時使用了ref關鍵字,這意味著它們都是 .NET引用類型,將會被分配在 .NET托管堆中。
使用STL.NET

  除去STL.NET集合聲明時的一些差異(這個差異與C++/CLI和標準C++間的句法差異有關),使用STL.NET集合與STL集合基本上一模一樣。以下的控制臺示例程序聲明了一個vector對象,接著在集合中加入了一些其他不同類型的元素:

    #include "stdafx.h"
#include <cliext/vector>

using namespace System;
using namespace cliext;

int main(array<System::String ^> ^args)
{
 vector<O

下一頁
返回列表
返回首頁 主站蜘蛛池模板: 天堂а√在线中文在线| 狠狠色综合色区| 成人影院在线观看视频| 亚洲精品一区二区三区四区乱码 | 成人性开放大片| 久久国产精品鲁丝片| 欧美bbbbb| 午夜dy888| 老司机在线精品| 成人免费视频国产| 久久亚洲精品无码aⅴ大香| 激情偷乱人伦小说视频在线| 国产六月婷婷爱在线观看| a拍拍男女免费看全片| 日韩人妻无码一区二区三区| 亚洲国产精品成人久久久 | 欧美人善交videosg| 亚洲色图黄色小说| 被猛男cao尿了| 亚洲av无码电影网| 一级成人a免费视频| 日本又粗又长一进一出抽搐| 亚洲精品一级片| 男女一边摸一边做爽视频| 国产女人aaa级久久久级| 99热精品久久只有精品| 无遮挡色视频真人免费| 亚洲性无码av在线| 精品爆乳一区二区三区无码AV| 国产精品99久久免费观看| www.日日夜夜| 日本韩国欧美在线观看| 亚洲欧美丝袜制服在线| 美女张开腿黄网站免费| 国产欧美精品一区二区| av狼最新网址| 好男人社区www在线视频| 久久婷婷久久一区二区三区| 最近中文字幕高清2019中文字幕| 亚洲黄色免费网站| 男女边摸边揉边做视频|