ReSharper 2020.1ヘルプ

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

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

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

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

When you use custom compiler toolchain, it сan be useful to provide additional compilation properties for better code assistance. To specify the compilation properties, select your project in Solution Explorer and go to the ReSharper section in Properties. You can specify additional include directories, add preprocessor definitions, and set the language standard:

ReSharper C++: additional project properties

The settings will be saved in a .vcxproj.DotSettings file next to the project file. Note that these additional properties do not affect compilation.

コード補完

自動および基本補完

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++
Optionally, you can include import symbol suggestions into the suggestion lists of automatic and basic completion by selecting 基本補完でインポート項目を表示する on the コード編集 | C++ | コード補完 page of ReSharper options ( Alt+R O ).
Note that this comes with a performance hit (since each time when ReSharper builds a completion list, it has to look at all the symbols in the solution to match them), so it is disabled by default.

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

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

Replacing dot with arrow in completion

生成補完

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

Generative completion in C++

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

Generative completion in C++

後置補完

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

ReSharper C++: Postfix templates

Postfix completion also includes postfix templates which, instead of looking up for suitable methods, let you quickly wrap an expression with frequently used language constructs.

コード補完のフリー機能

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

ReSharper C++: Free functions in code completion

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

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

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

ReSharper C++: code completion in dependent code

ステートメントの補完

The ステートメントの補完 feature inserts required syntax elements and puts the caret in a position where you can start typing the next statement. It allows you to use the Control+Shift+Enter shortcut instead of having to perform lots of other small actions. For example, this shortcut will automatically insert braces and a semicolon, and then put the caret where you can proceed to write the body:

ReSharper C++: complete statement

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

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

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

ReSharper C++: Parameter information

The Parameter info tooltip also provides details about members of the aggregate class when performing aggregate initialization, shows information for user-defined binary operators, deleted functions and implicitly generated functions.
On dependent code, it takes template parameter descriptions from documentation comments for template arguments as well as uses default template arguments to provide information about parameters in the dependent code.

ReSharper C++: Parameter information with dependent code

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

コードの再配置

コードの再配置 quickly moves code elements around, expands or shrinks the current scope, and more. To rearrange code, press Ctrl+Shift+Alt over the code element or selection that you want to move, then press any arrow key. If you invoke this command without first selecting something, the movable element is selected automatically.

There are two modes for 左に移動 and 右に移動 , which allow you to:

  • Rearrange elements that are normally written in a single line (though they also work if the elements are written in multiple lines). You can use 左に移動 and 右に移動 on elements in a braced initializer list, as well as function or lambda parameters and arguments, and so on.

    ReSharper C++: Rearrange parameters

  • Move a statement or a declaration into the region that directly follows it ( 右に移動 ) or outside the current region ( 左に移動 ):

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

The 上へ移動 and 下へ移動 commands rearrange elements within a specific scope up and down relative to other elements in this scope, or between neighboring scopes. You can use the 上へ移動 and 下へ移動 commands on statements and declarations, sections in a switch statement, enumerators, catch sections within a try-catch statement, conditions or branches in if statements, and more.

ReSharper C++: Rearrange if statements

You can also move opening or closing braces up or down to expand or shrink the current compound statement, type, or namespace:

ReSharper C++: Change the namespace scope

The full list of applicable cases:

Move left and Move right上に移動し、下に移動
  • Statements and declarations out of the current scope and into the following scope

  • Operands in an assignment, binary, fold, or conditional expression

  • Case labels in a switch statement

  • Indices in a subscript expression or an array specifier

  • Function/lambda parameters and arguments

  • Macro parameters and macro call arguments

  • Template parameters and arguments

  • Declarators and structured bindings in a declaration

  • 基本型

  • Elements in a braced initializer list

  • Types in an exception specification

  • Doxygen HTML attributes

  • Items in a C++/CLI generic constraint

  • Lambda captures

  • Member initializers

  • Parts of a using declaration

  • Statements and declarations within the surrounding scope

  • Enumerators within an enum declaration

  • Branches in a compound if statement

  • Conditions in nested if statements

  • Requirements within the body of a requires expression

  • Statements from one clause of an if-else, try-catch statement, or from one switch section to another one

  • Opening and closing braces in statements and declarations (greedy brace)

  • Switch sections within a switch statement

  • Catch sections within a try-catch statement

  • Doxygen commands

  • C++/CLI generic constraints

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

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"; } }

If necessary, you can customize generated function by editing the enum_to_string live template that ReSharper uses for generation. For example, you can configure the template to generate stream output operator overload:

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

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

文書エンティティ

With this context action, you can generate documentation comments for C++ symbols. If necessary, you can customize the comment stub by editing the doc live template that ReSharper uses for generation.

ReSharper: generating documentation comments

This action is also available with the dedicated shortcut Control+OemQuestion and from the menu: ReSharper | 編集 | 文書

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

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

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

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

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

最終更新日: 2020年8月05日

関連ページ:

コーディング支援

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

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

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

自動補完

ReSharper's automatic completion suggests names of classes, methods, variables, keywords, and any other symbols that are available within the current

基本補完

ReSharper | 編集 | 完全なシンボルReSharper's basic completion suggests names of classes, methods, variables, keywords, and any other symbols that are available...

生成補完

One of the easiest way to generate code with ReSharper is to usecode completion— all you need to do is to type several characters. Code generation sug...

コード要素の並べ替え

ReSharper | 編集 | コードの再配置Ctrl+Shift+Alt+Up/Down/Left/RightまたはCtrl+Shift+Alt+H/J/K/Lリモートデスクトップを使用する場合は、Ctrl+Shift+Alt+H/J/K/Lショートカットを使用してください。ReSharperを...