ReSharper 2019.2ヘルプ

C++のコード生成

ReSharperは、定型コードを生成するさまざまな方法を提供します。例:宣言されていないコードシンボルを使用し、これらのシンボルを用途に基づいて自動的に生成したり、型メンバーを生成したりすることができます。

現在のタイプのメンバー生成オプションは Alt+InsertReSharper | 編集 | コードの生成)で利用可能です。これらおよび他の多くのコード生成アクションも Alt+Enterコンテキストアクションとして利用可能です。

使用からコードを生成する

ReSharper lets you use code symbols ( methods, variables, fields, etc.) before you declare them. When ReSharper detects an undeclared symbol, it suggests one or more クイックフィックス Alt+Enter for generating a declaration based on the usage, and then smartly adjust the declaration according to the usage context:

Generating C++ field from usage

コンストラクターの生成

コンストラクター生成ウィザードは、選択されたフィールドのパラメーターを取るデフォルト以外のコンストラクターを作成します。

生成されたコンストラクターはすべて同じパターンに従います。

  • コンストラクターに含まれる各フィールドは、パラメータで初期化されます。

  • パラメータの名前は、対応するフィールドの名前から導出されます。

Generating constructors for C++ class

不足しているメンバーを生成する

この生成アクションは、基本抽象クラスで定義された純粋仮想関数のオーバーライドを作成します。

Generating missing members for a C++ class

優先メンバーの生成

この生成アクションは、派生クラスに仮想関数のオーバーライドを作成します。

Generating overriding members for a C++ class

メンバーをオーバーライドするダイアログでは、目的の機能を選択し、生成された上書きに対して次の設定を行うことができます。

  • 'override' 指定子を挿入してください - 基本クラスの対応する関数を隠す関数を生成したい場合は、このチェックボックスをオフにすることができます。

  • '仮想'指定子を挿入は生成されたメソッドを仮想にすることを可能にします。

定義の生成

この生成アクションを使用すると、クラス内で宣言されているが定義を持たないすべてのメンバー関数の定義スタブをすばやく作成できます。

コピー操作と移動操作

この生成アクションは、現在のクラスのオブジェクトのコピーおよび移動方法を定義するコピーコンストラクターおよび operator= 関数を作成します。

Generating copy and move actions for a C++ class

コピー操作と移動操作の生成ダイアログでは、クラスオブジェクトのコピーまたは移動時に考慮する必要がある基本クラスとクラスメンバーを選択し、生成された関数の次の設定を構成できます。

  • へのアクセス権では、public , protected または private アクセス修飾子を選択できます。

  • コピー/移動操作 - これらのセレクターにより、オペレーションの作成方法を選択できます。デフォルトでは、操作の実装が生成されます。ただし、明示的にデフォルトと削除された関数(英語)として生成するか、宣言のみを生成するか、またはいずれかの操作をスキップすることができます。

  • スワップベースの割当 - operator=の実装で swap 機能を使用するには、このチェックボックスを選択します: 例:

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

Getter および Setter の生成

ReSharperを使用すると、既存のフィールドに基づいてクラスのgetterおよびsetter関数を迅速に生成できます。

Generating getters and setters for C++ class

getter および setter の生成ダイアログでは、目的のフィールドを選択して、生成された関数の次の設定を構成することができます。

  • へのアクセス権では、public , protected または private アクセス修飾子を選択できます。

  • 種類では、ゲッター、セッター、またはその両方を生成するかどうかを選択できます。

  • によってパラメータを受け入れるを使用すると、生成されたセッターにパラメータを渡す方法を選択できます。つまり、const参照または値による選択です。

  • で戻るでは、生成されたゲッターがフィールドを返す方法を値、参照、またはconst参照のいずれかで選択できます。

  • Virtualは生成された機能を仮想にすることを可能にします。

等価演算子の生成

このコード生成コマンドを使用すると、選択したフィールドを使用して現在のクラスのオブジェクトを比較する operator== および operator== 関数を生成できます。

関係演算子の生成

このコード生成コマンドは、現在のクラスのオブジェクトを比較するために選択されたフィールドを使用する operator< , operator> , operator<=、および operator>= 関数を生成できます。

ストリーム操作の生成

This code generation command lets you generate the insertion operator operator<< that will use selected fields to define how to generate stream output for objects of the current class. For example:

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

必要に応じて、ostreamの代わりに wostream を使用できます。これを行うには、ストリーム操作を生成するダイアログでワイド文字ストリームを使用するを選択します。

ストリーム出力を生成するもう1つのオプションは、save()load() または serialize()のようなBoost Serialization関数用のスタブを生成することです。これを行うには、ストリーム操作を生成するダイアログの操作タイプセレクタで目的のオプションを選択します。

ハッシュ関数の生成

このコード生成コマンドを使用すると、クラスのハッシュ関数を生成できます。2つのハッシングアルゴリズムのいずれかを選択できます。

  • 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(英語), for example:

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

スワップ関数の生成

このコード生成コマンドを使用すると、選択したフィールドを使用して現在のクラスのオブジェクトを交換する swap 関数を生成できます: たとえば:

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_METHODn() および MOCK_CONST_METHODn() を自動的に作成します。
Google Mockヘッダーファイルが含まれている場合、派生クラスで使用できるようになります。

モッククラスでは、モックしているメソッドを手動で書く必要はありません。代わりに、GMockメソッドを生成するアクション( Alt+Enterコンテキストアクションとしても利用可能)を呼び出すことができます。

Generating Google Mock Methods

デフォルトでは、すべての基本クラスメソッドが選択されていますが、一部のモックメソッドを生成したくない場合は、対応するチェックボックスをクリアすることができます。

このアクションを適用すると、選択したモックメソッドがモッククラスに追加されます。

class MockTurtle: public Turtle { public: MOCK_METHOD1(Forward, void (int)); MOCK_METHOD1(Turn, void (int)); MOCK_CONST_METHOD0(GetX, int ()); MOCK_CONST_METHOD0(GetY, int ()); };
最終更新日: 2019年8月16日

関連事項

関連ページ:

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

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

コードの課題のクイックフィックス

ReSharperを使用すると、設計時に検出されたほとんどのコード課題を即座に修復できます。強調表示されたコードの課題で を押して、課題を解決したり最適以下のコードを改善したりするための適切な方法を選択するのと同じくらい簡単です。このトピックの内容:クイックフィックスの適用、Visual Stud...

C++のユニットテスト支援

C++のサポートは、ReSharper C++(ReSharperと一緒に、またはReSharper Ultimateと別々にまたは並行してインストールできる)の専用製品で使用できます。ReSharperは、Google C++テストフレームワーク、C++テストフレームワーク、Catch、Boost...

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

コンテキストアクションのいくつかの例をReSharperWebサイトでチェックすることができます。コンテキストアクションは、エディターで直接利用できるコード変換ヘルパーです。クイックフィックスとは対照的に、コンテキストアクションは問題の解決やコードの改善を目的としているためはなく、アクセス修飾子の変...

C++のコードテンプレート

すべてのReSharperのコードテンプレート機能は、C++でもサポートされています。これらの機能の詳細については、コード・テンプレートの該当するトピックを参照してください。ライブ・テンプレート:ライブ/サラウンドテンプレートは、既存のファイルでコードを生成したり、(テンプレート本体にパラメーターが...

クイックフィックスの例

クイックフィックスは、さまざまな状況で利用できますが、リストアップするには大きすぎます。ReSharperは、サポートされているすべての言語で合計1200を超えるクイックフィックスを提供します。ここでは、状況の小さな選択を使用して使用する方法を示します:型のミスマッチ:式の型を式コンテキストに適用可...