結合泛型與模板的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中文字幕|
亚洲黄色免费网站|
男女边摸边揉边做视频|