Visual Studio 2015 预览版本中所有相关C++重构

[原文发表地址]All about C++ Refactoring in Visual Studio 2015 Preview

[原文发表时间]2014/11/14 8:17PM

你好C++世界!

更新(1/6/2015):及时查看所有更新--自预览版版之后, 我们所做的的改进--在这个视频

伴随着于周三发布的Visual Studio 2015 预览版本,我们很高兴向大家呈现一个全新的、改善的高效代码功能,它在最大程度上(最终)实现了C++的重构。特别感谢那些厌倦了Visual Studio "14" CTPs,并给予我们反馈意见的人们。在预览版本中,我们尽自己最大的能力在最大程度上整合了尽可能多的意见, 我们将继续润色这些功能。

我想花费一些时间列出重构功能,从基本的如何调用每一个功能,到你可能喜欢的灵活小技巧。下列功能将涵盖在这篇文章中。

  • 重命名
  • 提取功能
  • 实施纯虚方法
  • 创建声明/定义
  • 移动函数定义
  • 转换为原始字符串

重命名毫无疑问是最常用和最需要的重构工具。它是如此重要,我们把它放在右击菜单的顶级。(你也可以通过按两次“Ctrl+R”快捷键激活该功能。)当用完这些功能以后,将会保存该设置项,但是默认情况下,你要完成两个窗户,第二个窗口是预览窗口。

提示和技巧

  • 如果要在预览窗口中,隐藏注释/字符串,不要勾选“Search comments/strings”。
  • 如果要在预览窗户中显示所有注释/字符串,保持所有默认未勾选项,不要勾选“Rename comments/strings”
  • 如果要显示和检查所有默认的注释/字符串, 勾选 "Rename comments/strings."
  • 想了解更多的信息(来自扩展功能部分),在9频道,观看Visual C++重构中的“重命名”。

提取功能 是我们最需要的第二功能. 我们仍在小范围的调整它,因此我们把它作为暂时扩展进行发;请针对这一功能给予我们反馈!一旦你安装了扩展功能,选择一段代码,右击,此功能在"Refactor…"之下(你同样可以通过Ctrl+R,Ctrl+M快捷键调出该功能。)

提示和技巧

  • 该工具有内置错误检查功能,比如你选择了表达式的一部分。(为了获得最佳效果,最好选择有效、规范的代码。)
  • 提取功能将匹配你当先的上下文。例如, 如果你想从一个成员函数中提取代码, 提取功能将同样作为一个成员函数 (之前的声明自动为你创建)。

实施纯虚方法将引出一个类所继承基类的所有纯虚方法。它是支持多个递归继承的。该功能可从类定义调用。

提示和技巧

  • 该功能倡导良好的代码规范, 因此它将在头文件中创建声明,在代码中创建定义部分。 如果同名源不存在,将创建该同名源。
  • 在基类中调用该功能实施虚方法仅限于特殊的基类。

 

  • 单步撤销操作将删除之前所创建的声明和定义,但不会删除生成的.CPP(如果已创建)
  • 如果想了解更多的信息(来自CTP 的功能), 请观看这个视频

题外话 : 之前的三个功能依赖于智能感知,如今翻译单元(TU)已可以调用这些功能。如果智能感知不能工作 (这一点你通常可以通过语义无颜色推断出),或者你的代码中有大量的编译错误/红色波浪线。这项功能将不能可靠地工作。

创建声明 /定义允许你基于之前的声明或者定义,快速创建一个与其对应的函数。为了更好的支持编码规范,并减少上下文切换, Peek 定义功能可以显示匹配所创建的位置。通过灯泡来激活该项功能。

之前:

之后:

提示和技巧

  • 该功能提倡良好的编码规范, 因此它将展示所创建的函数与邻近函数的关系。 如果没有显而易见的上下文,它将查找同名.h或.cpp来放置该函数,或者,如果不存在的话,将创建一个函数。
  • 如果检测到函数已声明但未定义时,绿色的波浪线将会出现(同时灯泡在上空盘旋)。
  • 想创建多个对应函数么? 只要选择代码确保它包含你所需要的所有功能(你的选择甚至不一定要精确!), 右键, 转到 Refactor…, 这样就调用了该功能。

  • 如果你不喜欢该功能的匹配位置, 通过灯泡适使用复制到剪切板的功能, 粘贴到它所应该去的位置。
  • 想了解更多的信息(来自CTP 的功能), 观看这个视频

移动定义位置允许你快速的移动函数内联和外联体 (通常在头文件和源文件之间)。它的实施和表现与创建声明/定义非常相似,没有灯泡。

提示和技巧

  • 分享以下创建声明/定义功能: 相对定位, Peek 定义, 批处理/块操作
  • 想了解更多信息 (来自CTP 的功能), 观看这个视频

原始字符串转换允许你转换任何字符串 (特别适用于对转义序列的字符串),在C++11中所介绍的读取原始字符串更容易。只要在字符串内任意位置(不要选择代码),从重构菜单中调用该功能。

提示和技巧

  • 只有那些具有文本含义的转义序列才被支持:
  • \n – 换行
  • \t – tab
  • \' – 单引号
  • \" – 双引号
  • \? – 问号
  • 如果字符串里包含任何转义序列, 它将在第一个不支持转义序列处发一条失败消息。
  • 没有转换回非原始字符串文本的功能——只需要使用撤销键。

请尝试这些功能,并给予我们反馈,不论是消极的还是积极的。谢谢你的时间,及帮助我们让Visual Studio成为更好的产品。

最美好的祝福

Gabriel Ha

Visual C++ PM

公告