ReSharper 2020.2 ヘルプ

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 の補完リストは、現在のファイルに含まれていないヘッダーからのアイテムも提案します。クラスが現在のファイルに含まれていない場合、補完リストは 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 は関数のすべてのオーバーロードに対して許可された引数に関する詳細を表示できます。ツールチップでは、パラメーターを持つすべてのパブリックシグニチャと、存在する場合は関数のドキュメントから取得した簡単な説明が表示されます。

パラメーターを入力すると、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+OemQuestion およびメニューからも使用できます:ReSharper | 編集 | 文書

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

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

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

  • 一致するマクロ、たとえば BEGIN_NAMESPACE / END_NAMESPACE

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

最終更新日 :

関連ページ:

コーディング支援

ReSharper はさまざまなコーディング支援機能を提供します。これにより、コードの記述と編集がはるかに高速になり、生産性が向上し、時間を節約できます。このセクションで説明する機能に加えて、ReSharper は、いくつかのコード生成機能およびコードテンプレートを提供します。これにより、コードをよ...

C++ のコードインスペクションとクイックフィックス

ReSharper のコード解析の主な機能は、C++ でもサポートされています。これらの機能の詳細については、コード解析の該当するトピックを参照してください。このセクションのサブジェクトでは、フィーチャマトリックスを見つけて、C++ で正確にサポートされているものを確認することもできます。このトピッ...

自動補完

ReSharper の自動補完は、クラス、メソッド、変数、キーワード、および以前にインポートされた拡張メソッドを含む現在の可視性スコープ内で使用可能なその他のシンボルの名前を提案します。補完リストでは、ライブテンプレート、コード生成の提案、ユニットテストのカテゴリなど、他の多くのコンテキスト固有の提...

基本補完

ReSharper | 編集 | 完全なシンボルReSharper の基本補完は、クラス、メソッド、変数、キーワード、および以前にインポートされた拡張メソッドを含む現在の可視性スコープ内で使用可能なその他のシンボルの名前を提案します。補完リストでは、ライブテンプレート、コード生成の提案、ユニッ...

生成補完

ReSharper でコードを生成する最も簡単な方法の一つは、使用することですコード補完をする必要があるすべては、いくつかの文字を入力することです -。自動補完および基本補完のリストには、コード生成の提案が含まれています。ReSharper オプション(Alt+R O)のコード編集 | メンバー...

インポートシンボル補完

ReSharper | 編集 | シンボルのインポートこのコマンドは、名前空間が現在のファイルにインポートされているかどうかにかかわらず、現在のプロジェクトで参照されているモジュールの型と拡張メソッドを示します。提案された各項目の名前空間は、候補リストの右側に表示されます。インポートされていな...