C++ 中的代码生成
ReSharper 提供多种方式生成样板代码。 例如,您可以使用未声明的代码符号,并基于用法自动生成这些符号,生成类型成员等。
当前类型的成员生成选项可通过 Alt+Insert () 使用。 这些以及许多其他代码生成操作也可以作为 上下文操作 与 Alt+Enter 一起使用。
从用法生成代码
ReSharper 允许您在声明代码符号(方法、变量、字段等)之前使用它们。 当 ReSharper 检测到未声明的符号时,它会建议一个或多个 快速修复 Alt+Enter ,用于根据用法生成声明,然后根据用法上下文智能调整声明:

生成构造函数
构造函数生成向导会创建一个非默认构造函数,该构造函数为选定字段设置参数。
所有生成的构造函数遵循相同的模式:
构造函数中包含的每个字段都使用参数进行初始化。
参数的名称来源于对应字段的名称。

生成缺失的成员
此生成操作为基抽象类中定义的纯虚函数创建重写。

生成重写的成员
此生成操作为派生类中的虚函数创建重写:

在 重写成员 对话框中,您可以选择所需的函数并配置生成的重写的以下首选项:
插入 'override' 说明符 — 如果您希望生成一个隐藏基类中对应函数的函数,可以取消选中此复选框。
插入 'virtual' 说明符 允许您将生成的方法设为虚函数。
生成定义
此生成操作可让您快速为类中声明但未定义的所有成员函数创建定义存根。
复制和移动操作
此生成操作会创建复制构造函数和 operator= 函数,用于定义当前类对象的复制和移动方式。

在 生成复制和移动操作 对话框中,您可以选择在复制或移动类对象时应考虑哪些基类和类成员,并配置生成函数的以下首选项:
访问权限 允许您选择
公有、受保护或私有访问修饰符。拷贝/移动操作 — 这些选择器允许您选择操作的创建方式。 默认情况下,会生成操作的实现。 但是,您可以将它们生成为 显式默认和删除的函数 ,仅生成声明,或跳过某些操作。
基于交换的赋值 — 选中此复选框以在
operator=的实现中使用交换函数。 例如,Rectangle& operator=(Rectangle other) { using std::swap; swap(*this, other); return *this; }
生成 getter 和 setter
使用 ReSharper,您可以快速为类基于现有字段生成 getter 和 setter 函数:

在 生成 getter 和 setter 对话框中,您可以选择所需的字段并配置生成函数的以下首选项:
访问权限 允许您选择
公有、受保护或私有访问修饰符。种类 允许您选择生成 getter、setter 或两者。
通过以下方式接受参数 允许您选择如何将参数传递给生成的 setter:通过 const 引用或按值传递。
通过以下方式返回 允许您选择生成的 getter 应如何返回字段:按值、引用或 const 引用。
生成相等运算符
此代码生成命令允许您生成 operator== 和 operator== 函数,这些函数将使用选定字段比较当前类的对象。
生成关系运算符
此代码生成命令帮助您生成 operator<、 operator>、 operator<= 和 operator>= 函数,这些函数将使用选定字段比较当前类的对象。
生成流操作
此代码生成命令允许您生成插入运算符 operator<< ,该运算符将使用选定字段定义如何为当前类的对象生成流输出。 例如:
如果需要,您可以使用 wostream 替代 ostream。 为此,请在 生成流操作 对话框中选择 使用宽字符流。
生成流输出的另一种选项是为 Boost Serialization 函数生成存根: save() 和 load() 或 serialize()。 为此,请在 生成流操作 对话框中的 操作类型 选择器中选择所需选项。
生成哈希函数
此代码生成命令允许您为类生成哈希函数。 您可以选择以下两种哈希算法之一:
boost::hash_combine ,例如:
#include <boost/functional/hash.hpp> ... friend std::size_t hash_value(const Rectangle& obj) { std::size_t seed = 0x315E4139; boost::hash_combine(seed, obj.width); boost::hash_combine(seed, obj.height); return seed; }shift and xor ,例如:
friend std::size_t hash_value(const Rectangle& obj) { std::size_t seed = 0x315E4139; seed ^= (seed << 6) + (seed >> 2) + 0x3449770D + static_cast<std::size_t>(obj.width); seed ^= (seed << 6) + (seed >> 2) + 0x49751560 + static_cast<std::size_t>(obj.height); return seed; }
生成交换函数
此代码生成命令允许您生成 交换 函数,该函数将使用选定字段交换当前类的对象。 例如:
生成 Google Mock 方法
当您使用 Google Mock 框架创建 mock 类时,此代码生成操作会自动创建 mocking 方法 MOCK_METHOD()。
如果包含了 Google Mock 头文件,它将对派生类可用。
在您的 mock 类中,您无需手动编写您正在 mock 的方法。 相反,您可以调用 生成 GMock 方法 操作(也可以作为 上下文操作 与 Alt+Enter 一起使用)。

默认情况下,所有基类方法都会被选中,如果您不希望为其中某些方法生成 mock 方法,可以取消选中相应的复选框。