ReSharper 2024.1 ヘルプ

C++ のコーディングアシスタンス

ReSharper のコーディング支援機能のほとんどは C++ でもサポートされています。これらの機能の詳細については、コーディング支援セクションの対応するトピックを参照してください。このセクションの主なトピックでは、機能マトリックスを見つけて、C++ で何がサポートされているのかを確認することもできます。

このトピックでは、C++ のコーディング支援機能の使用例をいくつか見つけることができます。

デフォルトでは、コードインスペクションクイックフィックスコンテキストアクションはすべてのソリューションファイルで使用できます。必要に応じて、ReSharper オプション Alt+R, Oコード編集 | C++ | インスペクションページのソリューション外部のファイルでインスペクション、クイックフィックス、コンテキストアクションを有効にするチェックボックスを使用して、ソリューションから参照される外部ファイルでこれらの機能を有効にすることができます。

カスタムコンパイラーツールチェーンを使用する場合、コーディング支援を向上させるために追加のコンパイルプロパティを提供すると便利です。コンパイルプロパティを指定するには、ソリューションエクスプローラーでプロジェクトを選択し、プロパティの ReSharper セクションに移動します。追加のインクルードディレクトリを指定したり、プリプロセッサー定義を追加したり、言語標準を設定したりできます。

ReSharper C++: additional project properties

設定は、プロジェクトファイルの横にある .vcxproj.DotSettings ファイルに保存されます。これらの追加のプロパティはコンパイルに影響を与えないことに注意してください。

コード補完

自動および基本補完

C++ ファイルでは、コードを記述するときに自動および基本的な Control+Space 補完を使用できます。例: 別のネームスペースから取得した列挙型メンバーをすばやく追加できます。

Automatic completion in C++

選択された補完項目には、構文がハイライトされた署名とドキュメントを含むポップアップが表示されます。必要に応じて、ReSharper オプション Alt+R, O環境 | IntelliSense | 補完外観ページで要約を表示チェックボックスをオフにして、このポップアップを無効にすることができます。

Basic completion in C++

インポートシンボル補完

使用するシンボルが対応する #include で現在のファイルにインポートされていないが、標準ライブラリまたはソリューションの別の場所で定義されている場合、Control+Alt+Space を押すと補完候補でこのシンボルをすばやく見つけることができます。

ReSharper: Import symbol completion in C++

オプションで、ReSharper オプション Alt+R, Oコード編集 | C++ | インスペクションページで基本補完でインポート項目を表示するを選択することで、自動補完と基本補完の候補リストにインポートシンボルの候補を含めることができます。

これにはパフォーマンスの低下が伴うことに注意してください(ReSharper が補完リストを構築するたびに、ソリューション内のすべてのシンボルを調べて一致させる必要があるため)、デフォルトでは無効になっています。

ドット / 矢印補完ヘルパー

メソッドを呼び出すときは、いつでもドット . または矢印 -> を入力して、補完リストで使用可能なすべてのメソッドを取得できます。./-> に一致しないメソッドは灰色で表示されます。このような方法を選択すると、./-> は自動的に修正されます。

Replacing dot with arrow in completion

生成補完

生成補完の提案もあります。例: オブジェクトのメンバー関数宣言を呼び出すと ...

Generative completion in C++

ReSharper は次の関数を生成します。

Generative completion in C++

後置補完

C++ での後置補完は、C# 拡張メソッドに非常によく似ています。式の後にドット . または矢印 -> を入力すると、ReSharper はその式を最初のパラメーターとして受け入れる無料の関数を提案します。提案を受け入れると、ReSharper はコードを書き換えて、式が最初の引数として渡されるようにします。

ReSharper C++: Postfix templates

後置補完機能には、適切なメソッドを探す代わりに、頻繁に使用される言語構造で式をすばやくラップできる後置テンプレートも含まれています。

コード補完のフリー機能

C++ コーディングの一般的な方法の 1 つは、メンバー関数よりも非メンバー非フレンド関数を優先することです。これは、カプセル化を増やし、クラスインターフェースをできる限り最小限に抑える優れた方法です。式の後にドット . または矢印 -> を入力すると、最初のパラメーターとして式を受け入れる自由関数が、メンバー関数の後の補完リストで提案されます。

ReSharper C++: Free functions in code completion

補完候補にフリー関数を表示したくない場合は、ReSharper オプション Alt+R, Oコード編集 | C++ | コード補完ページで対応するチェックボックスをオフにすることができます。

依存コード内のコード補完

ReSharper は自動的にデフォルトのテンプレート引数を使用して、依存コードの補完候補を提示します。テンプレート本体の内側に入力するとき、パラメーターの型情報がないとコード補完が利用できないことがあります。しかし、デフォルト引数を持つテンプレートパラメーターの場合、ReSharper はそれらのデフォルト引数に基づいて補完候補を提示します。

ReSharper C++: code completion in dependent code

インポートアイテムのコード補完

インポートシンボル補完が有効になっている場合、ReSharper の補完リストは、現在のファイルに含まれていないヘッダーの項目も提案します。クラスが現在のファイルに含まれていない場合、補完リストは、include ディレクティブを挿入するか、前方宣言を追加するかの 2 つのオプションを提案します。デフォルトでは両方のオプションを含むコンテキストメニューが表示されますが、ReSharper オプション Alt+R, Oコード編集 | C++ | コード補完ページでデフォルトの動作を変更できます。

ReSharper C++: code completion for an import item

ステートメントの補完

ステートメントの補完機能は、必要な構文要素を挿入し、次のステートメントの入力を開始できる位置にキャレットを置きます。これにより、他の多くの小さなアクションを実行する代わりに、Control+Shift+Enter ショートカットを使用できるようになります。例: このショートカットは中括弧とセミコロンを自動的に挿入し、本文の書き込みに進むことができる場所にキャレットを配置します。

ReSharper C++: complete statement

構文ハイライトとツールチップ

デフォルトでは、ReSharper は、構成可能な色で C++ 構文の拡張ハイライトを提供します。必要に応じて、ReSharper オプションのコード編集 | C++ | インスペクションページで無効にすることができます。異なる方法でハイライトできる識別子の種類は 20 種類あります。Visual Studio オプション(ツール | オプション | 環境 | フォントおよび色)でいつでも色とフォントを変更できます。

Configuring syntax highlighting for C++ identifiers
Configuring syntax highlighting for C++ identifiers

ReSharper は、コード要素の Visual Studio ツールチップを独自のツールチップに置き換えます。ツールチップには、構文、表示方法、フィールドシグネチャー、フォーマットされた XML、Doxygen コメントがハイライトされています。

ReSharper: Editor tooltip in C++

必要に応じて、ReSharper オプションの環境 | エディター | Visual Studio の機能ページの C++ の Visual Studio ツールチップを置き換えますチェックボックスをオフにすることにより、ReSharper ツールチップを無効にできます。

パラメーター情報

関数呼び出しを書いたり調べたりするときはいつでも、ReSharper は、関数のすべてのオーバーロードで許可されている引数の詳細を表示できます。ポップアップには、関数の XML ドキュメントから取得したパラメーターと簡単な説明 (利用可能な場合) を含むすべての公開署名が表示されます。

パラメーターを入力すると、ReSharper は入力されたパラメーターと互換性のある次のシグネチャーを自動的にハイライトし、適用できないシグネチャーをグレー表示します。既存の関数呼び出しの代替シグネチャーを調べるには、関数の括弧内にキャレットを置き、Control+P を押すか、メインメニューから ReSharper | 編集 | パラメーター情報を選択します。

ReSharper C++: Parameter information

パラメーター情報ツールチップは、集計の初期化を実行するときの集計クラスのメンバーに関する詳細も提供し、ユーザー定義の二項演算子、削除された関数、暗黙的に生成された関数の情報を表示します。

依存コードでは、テンプレート引数のドキュメントコメントからテンプレートパラメーターの説明を取得し、デフォルトのテンプレート引数を使用して依存コードのパラメーターに関する情報を提供します。

ReSharper C++: Parameter information with dependent code

パラメーター情報ツールチップは、ReSharper オプションの環境 | IntelliSense | パラメーター情報ページで設定可能です。

コードの再配置

コードの再配置は、コード要素をすばやく移動し、現在のスコープを拡大または縮小します。コードを再配置するには、移動するコード要素または選択範囲の上で Ctrl+Shift+Alt を押してから、任意の矢印キーを押します。最初に何かを選択せずにこのコマンドを呼び出すと、可動要素が自動的に選択されます。

左に移動右に移動には、次の 2 つのモードがあります。

  • 通常は 1 行で記述される要素を再配置します(要素が複数行で記述されている場合でも機能します)。ブレース付きのイニシャライザーリストの要素、および関数やラムダのパラメーターと引数などに左に移動右に移動を使用できます。

    ReSharper C++: Rearrange parameters
  • ステートメントまたは宣言を、その直後の領域(右に移動)または現在の領域の外(左に移動)に移動します。

    ReSharper C++: Move a line into the following region

上へ移動および下へ移動コマンドは、特定のスコープ内の要素を、このスコープ内の他の要素に対して上下に、または隣接するスコープ間で再配置します。上へ移動コマンドと下へ移動コマンドは、ステートメントと宣言、switch ステートメントのセクション、列挙子、try-catch ステートメント内の catch セクション、条件または if ステートメントのブランチなどで使用できます。

ReSharper C++: Rearrange if statements

中括弧を上下に移動して、現在の複合ステートメント、タイプ、ネームスペースを拡大または縮小することもできます。

ReSharper C++: Change the namespace scope

該当するケースの完全なリスト:

左に移動して右に移動

上に移動し、下に移動

  • 現在の範囲外で次の範囲内のステートメントと宣言

  • 代入式、バイナリ式、フォールド式、条件式のオペランド

  • switch ステートメントのケースラベル

  • 添え字式または配列指定子のインデックス

  • 関数 / ラムダパラメーターと引数

  • マクロパラメーターとマクロ呼び出し引数

  • テンプレートのパラメーターと引数

  • 宣言における宣言子と構造化バインディング

  • 基本型

  • ブレース初期化子リストの要素

  • 例外仕様のタイプ

  • Doxygen HTML 属性

  • C++ /CLI ジェネリクス制約の項目

  • ラムダキャプチャー

  • メンバー初期化子

  • 使用宣言の一部

  • 周囲のスコープ内のステートメントと宣言

  • enum 宣言内の列挙子

  • 複合 if ステートメントのブランチ

  • ネストされた if ステートメントの条件

  • a の本文内の要件は、式を要求します

  • if-else、try-catch ステートメントの 1 つの句からのステートメント、または 1 つのスイッチセクションから別のセクションへのステートメント

  • ステートメントと宣言での中括弧の開閉 (貪欲ブレース)

  • switch ステートメント内のセクションを切り替える

  • try-catch ステートメント内の Catch セクション

  • Doxygen コマンド

  • C++ /CLI の一般的な制約

コンテキストアクション

ReSharper は、C++ コードをターゲットとする一連のコンテキストアクションを提供します。ReSharper オプションのコード編集 | C++ | コンテキストアクションページでこれらのアクションの完全なリストを見つけることができます。必要に応じて、このページを使用していくつかのアクションを無効にすることもできます。

現在のキャレット位置でコンテキストアクションが使用可能になるとすぐに、ReSharper は対応するアクションインジケーター ThemedIcon.ContextAction.Screen.(Gray).png をキャレットの左側に表示します。しかし時々、ReSharper は現在のキャレットポジションのために文脈上利用可能ないくつかの機能を提供します。この場合、最も優先度の高いアクションに対応するアクションインジケータが表示され、その他のすべてのアクションは、アクションインジケータをクリックするか、Alt+Enter を押してアクションリストを展開したときにのみ表示されます。コンテキストアクションは最も優先順位が低いため、アクションリストの一番下に表示されることがよくあります。

C++ のコンテキストアクションの例をいくつか示します。

列挙型を文字列に変換する (enum-to-string ヘルパーを生成する)

このコンテキストアクションは、列挙子を対応する文字列に変換する特定の列挙型のヘルパー関数を生成します。

例: 次の列挙型でこのアクションを起動した場合

enum class Suit { Diamonds, Hearts, Clubs, Spades };

ReSharper はあなたのために次の関数を生成します:

const char* to_string(Suit e) { switch (e) { case Suit::Diamonds: return "Diamonds"; case Suit::Hearts: return "Hearts"; case Suit::Clubs: return "Clubs"; case Suit::Spades: return "Spades"; default: return "unknown"; } }

必要に応じて、ReSharper が生成に使用する enum_to_string ライブテンプレートを編集して、生成された関数をカスタマイズできます。例: ストリーム出力演算子のオーバーロードを生成するようにテンプレートを構成できます。

std::ostream& operator <<(std::ostream& out, Suit e) { switch (e) { case Suit::Diamonds: return out << "Diamonds"; case Suit::Hearts: return out << "Hearts"; case Suit::Clubs: return out << "Clubs"; case Suit::Spades: return out << "Spades"; default: assert(false); return out << "unknown"; } }

不足している case 文を生成する

enum を切り替えるときに、すべての case 文を手動で記述するのではなく、欠落している case 文をすべて生成する context アクションを使用することができます。

Generating missing case statements in C++

しなければならないことは、各ステートメントに必要なロジックを書くことだけです。

Generating missing case statements in C++

ネストした 'if' ステートメントをマージ

ReSharper は、ネストされた 'if' ステートメントをコンテキストアクションとマージできます。

Merging nested 'if' statements in C++

実装の生成

ReSharper は、関数またはメソッドのスタブ実装を自動的に作成できます。常にインライン実装を生成できます。関数がヘッダーファイルで定義されていて、対応するソースファイルがある場合は、ソースファイルで実装を生成できます。

Generating implementation for a function

実装をクラススコープから移動する

ReSharper を使用すると、関数またはメソッドの実装を、ヘッダーから対応するソースファイル(存在する場合)に移動できます。このコンテキストアクションを適用した後、定義は元の場所に残り、実装はソースファイルに移動されます。エディターのコンテキストもソースファイルに切り替わります。

Moving implementation out of class scope to the source file

コンテキストアクションを使用して、現在の選択範囲内のすべての実装を移動することもできます。

文書エンティティ

このコンテキストアクションを使用すると、C++ シンボルのドキュメントコメントを生成できます。必要に応じて、ReSharper が生成に使用する doc live テンプレートを編集して、コメントスタブをカスタマイズできます。

ReSharper: generating documentation comments

このアクションは、専用のショートカット Control+/ およびメニューからも使用できます: ReSharper | 編集 | 文書

ペアアイテムをハイライトする

ReSharper は、ペアの 1 つの項目にキャレットを置くと、一致するさまざまな項目をハイライトします。

  • マッチするデリミタ ( ()[]{}<> )

  • 一致するマクロ(例: BEGIN_NAMESPACE/END_NAMESPACE

  • printfboost::format のフォーマット指定子と引数のマッチング

関連ページ:

コーディング支援

ReSharper はさまざまなコーディング支援機能を提供します。これにより、コードの記述と編集がはるかに高速になり、生産性が向上し、時間を節約できます。ReSharper のコーディング支援機能のほとんどは、C# と Visual Basic で利用できます。一部は複数の言語で利用でき、その他は言語固有です。以下の表は、すべてのコーディング支援機能と、それらがサポートされている言語 / テクノロジを示しています。このセクション内のトピックに示されている手順と例では、C# のコーディング支援機能...

C++ でのコード分析

ReSharper のコード解析の主な機能は、C++ でもサポートされています。これらの機能の詳細については、コード解析の該当するトピックを参照してください。このセクションのサブジェクトでは、フィーチャマトリックスを見つけて、C++ で正確にサポートされているものを確認することもできます。このトピックでは、C++ でコード解析機能を使用する例をいくつか見てみましょう。デフォルトでは、コードインスペクション、クイックフィックス、コンテキストアクションはすべてのソリューションファイルで使用できます。...

自動補完

ReSharper の自動補完は、クラス、メソッド、変数、キーワード、以前にインポートされた拡張メソッドを含む現在の可視性スコープ内で使用可能なその他のシンボルの名前を提案します。ライブテンプレート、コード生成の提案、単体テストのカテゴリなど、他の多くのコンテキスト固有の提案も補完リストで利用できます。デフォルトでは、自動補完の候補にはスマート補完とインポートシンボル補完の項目も含まれます。デフォルトの動作を変更する場合は、ReSharper オプション Alt+R, O のページで対応するコントロ...

生成補完

ReSharper でコードを生成する最も簡単な方法の 1 つは、コード補完を使用することです。必要なのは、いくつかの文字を入力することだけです。コード生成の提案は、自動補完と基本補完のリストに含まれています。コード補完でコードを生成する方法の例をいくつか示します。メンバーのオーバーライドと実装:以下の例では、コード補完は、基本クラスから仮想メンバーのオーバーライドを作成できます。派生型で基本メソッド名を入力し始めると、それをオーバーライドするための提案が表示されます。提案を受け入れると、デフ...

インポートシンボル補完

このコマンドは、名前空間が現在のファイルにインポートされているかどうかにかかわらず、現在のプロジェクトで参照されているモジュールの型と拡張メソッドを示します。提案された各項目の名前空間は、候補リストの右側に表示されます。インポートされていないタイプを選択すると、必要な名前空間のインポート指示が自動的に追加されます。デフォルトでは、C# および VB.NET のインポートシンボル補完項目は、自動補完および基本補完の候補リストに含まれています。デフォルトの動作を変更する場合は、ReSharper オ...

コンテキストアクション

コンテキストアクションは、エディターで直接利用できるコード変換ヘルパーです。クイックフィックスとは対照的に、コンテキストアクションは問題の解決やコードの改善を目的としているためはなく、アクセス修飾子の変更、null をチェックするコードの生成、'foreach' の 'for' への変換などの小さな変更を素早く導入できます。ReSharper は、サポートされているすべての言語で数百のコンテキストアクションを提供します。完全なリストは、ReSharper オプション Alt+R, O のページとコン...