这是什么TR1?

你好。罗布·休伊特又来了。我是VC库团队的SDET。我最近一直在做的一件事是VisualStudio2008的新TR1附加组件。当VS2008TR1支持在一个月前宣布时,我确信人们的反应不同于“呜呼!我等不及了!”“嗯?TR1是什么?我在乎这个吗?“还有各种各样的事情。

null

这篇文章主要是针对第二类人-那些谁没有听说过TR1,谁可能还没有找到时间或灵感去寻找它的一切。我将在这里简单地讨论TR1是什么,并且我将描述一些我认为特别漂亮的TR1特性。这将不是一个深入的讨论或如何操作手册,但它将有希望启发有人在那里采取更仔细地看看什么是TR1,看看它是否可以帮助您在您的项目。

那么TR1是什么呢?嗯,Tr1(“技术报告1”)是对C++ 0x标准的一组建议添加。大部分的IT可能会找到新的标准,但同时它也为C++提供了一个有用的垫脚石。TR1充满了非常有用的新实用程序,例如新型智能指针(称为“sharedu ptr”和“weaku ptr”)、新容器(元组、无序映射、无序集和整洁的类似STL的数组)、引用包装器、正则表达式支持和函数包装器。你可能会看到这个列表,觉得其中很多听起来很熟悉。例如,智能指针和函数包装器已经存在。这是真的,但是TR1的版本试图比现有的东西更容易使用和更有用…有点像下一次迭代基于几年的经验找出什么是有效的,什么是无效的。

好吧,说一些细节!首先,我想提到新的TR1元组和数组类。那我就谈一谈共享的ptr。最后,我将介绍一些关于regex的信息,regex是TR1的正则表达式实用工具。同样,熟悉TR1的人可能不会从中得到太多的收获,但这将有希望激起那些TR1新手的胃口。

Tuple与现有的pair类非常相似,只是它最多可以容纳10个条目,而不仅仅是两个条目。就像pairp;,您可以有类似tuplet;的内容;。汉迪,不是吗?

TR1的array类非常类似于固定长度的STL向量。Vector是一个非常有用的类,对于大多数数组类型的需要,它可能已经足够了(甚至更好)。然而,在某些情况下,开发人员绝对肯定所需的数组总是一个特定的大小…不多不少。在这些情况下,不需要向量的可变大小特性,只会增加额外的开销。虽然您可以只使用常规的老式C样式的“方括号”数组,但TR1 array类允许您使用所有STL类型的迭代器和算法。虽然它缺乏向量的灵活性,但它提供了比C样式数组更多的选项。

Sharedu ptr是一个非常易于使用的工具,它大大简化了内存管理。这几乎使新/删除组合过时。Sharedu ptr是一个非常容易使用的智能指针类。语法相当简单…shared_ptrsp(new STRING(“foo”));为包含“foo”的字符串创建一个名为sp的共享指针。这个共享的指针的行为几乎和任何“普通”指针一样,只不过完成后不需要记住删除它。而且与一些旧的智能指针不同,您不需要修改目标类(在本例中为string)以包含引用计数或类似的内容……几乎任何您想要的类都可以按原样使用shared_ptr。说到引用计数,sharedu ptr负责这一点(因此名称中有“shared”)。如果我要创建另一个指向同一事物的共享u ptr(比如shared u ptrsp2=sp;),然后sharedu ptr的引用计数足够聪明,只有在sp和sp2都不在的时候才能释放内存。当然,这仅仅触及了sharedu ptr的本质,但这只是一个开始。

Regex是一个类,它允许您编写类似于Perl中常用的复杂正则表达式。虽然C++对正则表达式总是有一定数量的支持,但是Tr1的ReEX工具通过在解析、匹配和捕获组的机制中构建来简化事情。regex类保存实际的正则表达式,regexu search()、regexu match()和regexu replace()等算法使将该表达式应用于字符串变得容易。正如您可能从算法名称推断的那样,regexu search()告诉开发人员字符串是否包含符合表达式的任何子字符串,regexu match()告诉整个字符串是否符合表达式,regexu replace()提供了一种更改字符串以适应特定格式的简单方法。Regex可以做比我在这里概述的更多的事情,但是这应该让你了解Regex的意义。

好吧,这就是我想说的。如果这有点太好了!当然,如果您有任何意见或问题,我们将不胜感激。

Rob Huyett,VC库团队

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享