ReSharper 2019.3ヘルプ

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

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

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

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

コード補完

自動および基本補完

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

Automatic completion in C++

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

Basic completion in C++

インポート・シンボル補完

使用するシンボルが対応する #includeで現在のファイルにインポートされていないが、標準ライブラリーまたはソリューションの別の場所で定義されている場合、Ctrl+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はコードを書き換えて、式が最初の引数として渡されるようにします。

後置の補完には、適切なメソッドを探すのではなく、頻繁に使用される言語構造を持つ式をすばやく折り返すことができるような後置テンプレートも含まれています。

コード補完のフリー機能

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

補完候補に無料の機能を含めたくない場合は、ReSharperオプション(Alt+R,,O)のコード編集 | C++ | コード補完ページの対応するチェックボックスをオフにすることができます。

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

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

ReSharper C++: code completion in dependent code

構文強調表示とツールチップ

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

Configuring syntax highlighting for C++ identifiers

ReSharperはまた、コード要素のVisual Studioツールチップを、構文、表示方法およびフィールド署名、フォーマットされたXMLおよびDoxygenコメントを強調表示した独自のツールチップで置き換えます。

ReSharper: Editor tooltip in C++

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

インレイ・ヒント

パラメータ名のヒントは、メソッド呼び出し時に対応する引数の隣にパラメータ名を表示するエディターの装飾です。これらは、関数呼び出しと集約の初期化で、長い(そして場合によっては入れ子になった)パラメータの一覧を調べるのに役立ちます。
以下の例では、パラメータ名のヒントが、高さと幅の引数が混在しているという事実を見つけるのに役立ちます。

ReSharper C++: parameter and namespace name hints

名前空間定義の最後にある名前空間名のヒントは、LLVM(英語)またはGoogle(英語)のガイドラインに従わない場合に役立ちます。LLVM(英語)またはGoogle(英語)のガイドラインでは、名前空間を括弧を閉じた後にコメントに名前空間を追加することをお勧めします。

プリプロセッサディレクティブヒントは、条件付きインクルード(#ifdef , #ifndef , #if , #endif , #elseおよび #elif)がマクロ定義にどのように対応するかをすばやく理解できます。

ReSharper: Preprocessor directive hints in C++

タイプ名のヒントは、C++17以降の複雑な集約の初期化を解くのに役立ちます。

ReSharper C++: parameter and namespace name hints in aggregate initialization

非const参照によって渡される関数引数の参照ヒントがあります。

ReSharper: reference hints for function arguments passed by a non-const reference

パラメータと名前空間の名前のヒントに対する詳細な設定オプションがあります。

パラメータ情報

関数呼び出しを書いたり調べたりしているときはいつでも、ReSharperは関数のすべてのオーバーロードに対して許可された引数に関する詳細を表示できます。ツールチップでは、パラメータを持つすべてのパブリックシグニチャと、存在する場合は関数のドキュメントから取得した簡単な説明が表示されます。

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

ReSharper C++: Parameter information

Parameter infoツールチップは、集約の初期化を実行するときに集約クラスのメンバーに関する詳細を提供し、ユーザー定義の2項演算子、削除された関数、および暗黙的に生成された関数に関する情報を表示します。
従属コードでは、テンプレート引数のドキュメントコメントからテンプレートパラメータの説明を取得し、デフォルトテンプレート引数を使用して従属コードのパラメータに関する情報を提供します。

ReSharper C++: Parameter information with dependent code

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

コンテキスト・アクション

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

現在のキャレット位置でコンテキストアクションが使用可能になるとすぐに、ReSharperは対応するアクションインジケーター ThemedIcon ContextAction Screen Gray をキャレットの左側に表示します。しかし時々、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ライブテンプレートを編集して、コメントスタブをカスタマイズできます。

ペアアイテムを強調表示する

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

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

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

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

最終更新日: 2019年12月12日

関連ページ:

コーディング支援

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

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

C++のサポートは、ReSharper C++(ReSharperと一緒に、またはReSharper Ultimateと別々にまたは並行してインストールできる)の専用製品で使用できます。ReSharperのコード解析の主な機能は、C++でもサポートされています。これらの機能の詳細については、コード解...

自動補完

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

基本補完

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

生成補完

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

Clang-Tidy統合

C++のサポートは、ReSharper C++(ReSharperと一緒に、またはReSharper Ultimateと別々にまたは並行してインストールできる)の専用製品で使用できます。Clang-Tidyは、一般的なClangコンパイラに基づいた強力なオープンソースコード解析ツールです。典型的なプ...