用C++ 0x实现智能浏览

大家好,

null

我叫Sunny Gupta,是VC++IDE&编译器团队的SDET成员。在这个博客中,我将讨论对Cpp0x的IDE支持。

什么是C++ 0x??

C++ 0x是名称 对于 下一版本的C++程序设计语言标准。  对于VC 10,到目前为止在编译器中实现的C++ 0x特性是“自动”、“lambdas”、“rValk引用”、“DeCyType”、“NulLPTR”和“StistaYaStRT”。

有关这些的详细信息,请参阅:

· Lambda-auto-staticu断言

· R值引用

· 脱模

如果IDE能够为所有这些新特性提供智能感知和浏览功能,那将是非常酷的,VS团队会这么做吗?

是的,Beta2将拥有所有的智能感知和浏览功能,以适应这些c++语言的变化。

对预期的简要概述。

在我解释功能的细节之前,我想列出一些很酷的东西。

· 一个静态的断言被扭曲了(单词下面的红色波浪下划线表示某个错误),断言消息作为错误消息。

· 在lambdas上获取参数帮助(关于lambda参数的工具提示)

· 快速信息(鼠标弹出的工具提示)显示使用auto声明的对象的实际类型

· 作为左值引用的右值引用的完整intellisense。

· 快速信息,自动完成等,在decltype语句内部工作。

功能概述

通过一些屏幕截图可以更好地解释这个特性:我将演示许多可用的intellisense/浏览选项中的一些。

图片[1]-用C++ 0x实现智能浏览-yiteyi-C++库

功能的设计和开发

我们在设计这个特性时有一个主要目标。这个目标是cpp0x与所有其他cpp构造的intellinse奇偶校验。在设计功能时,我们考虑了以下几点:

· 编写和使用lambda应该和编写一样简单,并使用常规C++函数。

· 如果对象是使用实际类型名声明的,则使用“auto”或“decltype”声明的对象上的Intellisense应相同

· 编写静态断言应该和调用某个内置函数一样简单。

· 用于右值引用的Intellisense的行为应与用于左值引用的行为相同

开发包括将新的cpp0x特性与当前的intellisense引擎集成。最具挑战性的部分是确保IDE显示预期的intellisense并浏览到正确的位置。示例:确保在IDE上lambda表示为具有返回类型和参数的函数。lambda实际上是带有重载运算符()的类。因此lambda语句在内部创建了一个具有重载运算符()的类。在开发过程中,只要将cpp0x与intellisense引擎集成,就可以在工具提示中将lambda表示为“operator()”。而不是lambda name。我们必须确保lambda将显示在哪里、类视图、快速信息、调用层次结构等,它不应该显示为“operator()”,并且应该显示一个适当的可读签名。

图片[2]-用C++ 0x实现智能浏览-yiteyi-C++库

测试

我是这部片子的QA。因为这不是一个孤立的特性,所以最具挑战性的部分是确保IDE中这些新的c++语言特性具有完整的智能和浏览功能。浏览(快速符号搜索、类视图、Navbar、Gotodef等)和intellisense(快速信息、自动完成、参数帮助和波形)需要专门的测试。这个特性是IDE特性,所以IDE测试和引擎级测试同等重要。

IDE测试的示例是:确保鼠标悬停在静态断言曲线上时显示正确的错误消息工具提示。

引擎级测试示例:确保Intellisense编译器API返回正确的Intellisense结果。从编辑器调用这些API来显示结果。

有关测试的更多信息,请访问博客: 测试VC++编译器和Intellisense

客户影响和总结

这将使客户能够轻松准确地使用cpp0x。由于cpp0x不可避免地会在底层Cpp实现上创建一个精简的包装层,因此使用intellisense和浏览将确保代码具有更好的可读性。如果没有使用如此大的C++特性,因为IDE不够聪明,无法帮助程序员导航它们的复杂性,那将是一件遗憾的事情。 随着我们对IDE和IntelliSense引擎所做的更改,我们当然希望我们已经解决了这个问题。 我们对这些新功能感到兴奋,希望您也会喜欢。

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