JetBrains Rider 2025.2 Help

C++ 中的代码生成

JetBrains Rider 提供多种方式生成样板代码。 例如,您可以使用未声明的代码符号,并根据用法自动生成这些符号,生成类型成员等。

当前类型的成员生成选项可通过 Alt+Insert代码|生成 )使用。 这些以及许多其他代码生成操作也可以作为 上下文操作Alt+Enter 一起使用。

从使用中生成代码

JetBrains Rider 允许您在声明代码符号(方法、变量、字段等)之前使用它们。 当 JetBrains Rider 检测到未声明的符号时,它会建议一个或多个 快速修复 Alt+Enter ,根据用法生成声明,然后根据用法上下文智能调整声明:

从使用中生成 C++ 字段

生成构造函数

构造函数生成向导会创建一个非默认构造函数,该构造函数为选定字段设置参数。

所有生成的构造函数遵循相同的模式:

  • 构造函数中包含的每个字段都使用一个参数进行初始化。

  • 参数的名称来源于对应字段的名称。

为 C++ 类生成构造函数

生成缺失的成员

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

为 C++ 类生成缺失的成员

生成重写成员

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

为 C++ 类生成重写成员

重写成员 对话框中,您可以选择所需的函数并配置生成的重写的以下偏好设置:

  • 插入 'override' 说明符 — 如果您希望生成一个隐藏基类中对应函数的函数,可以取消选中此复选框。

  • 插入 'virtual' 说明符 允许您将生成的方法设为虚函数。

生成定义

此生成操作可快速为类中声明但未定义的所有成员函数创建定义存根。

复制和移动操作

此生成操作创建复制构造函数和 运算符= 函数,用于定义当前类对象的复制和移动方式。

为 C++ 类生成复制和移动操作

生成复制和移动操作 对话框中,您可以选择在复制或移动类对象时应考虑哪些基类和类成员,并配置生成函数的以下偏好设置:

  • 访问权限 允许您选择 公开protected私有 访问修饰符。

  • 拷贝/移动操作 — 这些选择器允许您选择操作的创建方式。 默认情况下,会生成操作的实现。 但是,您可以将它们生成为 显式默认和删除的函数 ,仅生成声明,或跳过某些操作。

  • 基于交换的赋值 — 选中此复选框以在 运算符= 的实现中使用 交换 函数。 例如,

    Rectangle& operator=(Rectangle other) { using std::swap; swap(*this, other); return *this; }

生成 getter 和 setter

使用 JetBrains Rider,您可以快速为类基于现有字段生成 getter 和 setter 函数:

为 C++ 类生成 getter 和 setter

生成 getter 和 setter 对话框中,您可以选择所需的字段并配置生成函数的以下偏好设置:

  • 访问权限 允许您选择 公共protected私有 访问修饰符。

  • 种类 允许您选择生成 getter、setter 或两者。

  • 通过以下方式接受参数 允许您选择如何将参数传递给生成的 setter:通过 const 引用或按值传递。

  • 通过以下方式返回 允许您选择生成的 getter 应如何返回字段:按值、引用或 const 引用。

生成相等运算符

此代码生成命令允许您生成 运算符==运算符== 函数,这些函数将使用选定字段比较当前类的对象。

生成关系运算符

此代码生成命令帮助您生成 operator<operator>operator<=operator>= 函数,这些函数将使用选定字段比较当前类的对象。

生成流操作

此代码生成命令允许您生成插入运算符 operator<< ,该运算符将使用选定字段定义如何为当前类的对象生成流输出。 例如:

friend std::ostream& operator<<(std::ostream& os, const Rectangle& obj) { return os << "width: " << obj.width << " height: " << obj.height; }

如果需要,您可以使用 wostream 替代 ostream。 为此,请在 生成流操作 对话框中选择 使用宽字符流

生成流输出的另一种选项是为 Boost Serialization 函数生成存根: 保存()加载()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; }

生成交换函数

此代码生成命令允许您生成 交换 函数,该函数将使用选定字段交换当前类的对象。 例如:

friend void swap(Rectangle& lhs, Rectangle& rhs) { using std::swap; swap(lhs.width, rhs.width); swap(lhs.height, rhs.height); }

生成 Google Mock 方法

当您使用 Google Mock 框架创建模拟类时,此代码生成操作会自动创建模拟方法 MOCK_METHOD()

如果包含了 Google Mock 头文件,则此功能对派生类可用。

在您的模拟类中,您无需手动编写您正在模拟的方法。 相反,您可以调用 生成 GMock 方法 操作(也可以作为 上下文操作Alt+Enter 一起使用)。

生成 Google Mock 方法

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

最后修改日期: 2025年 9月 26日