科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件结合泛型与模板的STL.NET探索

结合泛型与模板的STL.NET探索

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

说到泛型与模板的差别,相信每个 .NET平台的C 程序员都会问这个问题:我该选择哪种技术呢?

作者:谢启东编译 来源:天极开发 2007年11月3日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
使用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<Object^>^ v = gcnew vector<Object^>;
 v->push_back(nullptr); //第一个元素为空
 v->push_back(gcnew Object()); //第二个元素为一个纯对象
 v->push_back(1); //第三个元素为装箱的整数
 v->push_back("Element Four"); //第四个元素为字符串
 return 0;
}

  以上代码演示了STL.NET的一个重要特点:仍旧是非常熟悉的集合类,另一个特点是,可在一个集合中使用两种不同的编程模型,这意味着如果要查找上述代码中的整数1,可使用下列STL find算法:

//当作STL集合使用
bool containsOneSTL = find( v->begin( ), v->end( ), 1 ) != v->end();

  另外,.NET中ICollection泛型接口也能用于实现同样的逻辑:

//当作 .NET集合使用
bool containsOnedotNet = v->Contains(1);

  这种可在同一集合类中同时使用STL和 .NET算法的能力--而无须复制内容或提供桥接函数--允许C++/CLI程序员对任何有关集合的操作,选择最恰当的函数与库。

  有关STL.NET最后一个特点是,可为用C#或VB.NET编写的 .NET程序集,无缝地提供其STL.NET集合。由于STL.NET集合实现了ICollection泛型接口,所以在类型安全上,再无任何损耗,再者,STL.NET集合使用了托管内存来存储集合中的元素,因此,在与那些提供STL.NET集合的C++/CLI程序集互操作时,再无任何性能或代码安全性方面的损耗。

  .NET王国C++程序员的入场券

  STL.NET代表了Visual C++产品的一个重要部分,其允许C++程序员利用他们现有的技能与经验,尽早使用上带成强大集合与算法的类库,而不至于被快速成长的 .NET世界拒之门外。

  STL.NET作为一个光明的开端,将有助于C++在保持语言光荣传统的同时,成为 .NET语言开发的第一类选择。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章