5

既存の自動C++リファクタリングツールの比較表を作成し、そのようなツールを無料でオープンソースで作成できるかどうかを調べます。

私の質問は、日常業務で実際にどのようなリファクタリングを使用しているのかということです。変数/クラス/メソッドの名前を変更するなどの明らかなことはありますが、テンプレート、STL、コピーコンストラクター、初期化子などを処理するなど、C ++に固有の何かがありますか?

私は、C ++開発者がコーディングで毎日直面している、少なくとも理論的には自動化できる小さな問題すべての現実的な図を作成することに興味があります。私は同僚と話しているが、それだけではおそらく十分ではない。

前もって感謝します。

4

6 に答える 6

2

回答から、実際のリファクタリングツールを見たC++プログラマーはほとんどいないことは明らかです。はい、それらは非常にまれであり、使用するIDEに非常に固有です。それは避けられないことです。そうでなければ、どのソースコードファイルが最終的な実行可能ファイルにコードを提供しているかを知る良い方法はありません。プリプロセッサはそれを非常に難しくします、あなたはマクロ値を知る必要があります。ソースコードパーサーが必要ですが、十分ではありません。

Visual AssistforVSは私が知っているものです。

于 2010-11-18T14:29:06.007 に答える
1

マーティンファウラーのリファクタリング:既存のコードのデザインの改善とジョシュアケリエフスキーによるパターンへのリファクタリングをご覧ください。これらは順番にGoFデザインパターンの本を参照しているので、それも入手してください。

基本的な名前変更機能と抽出機能を超えることができる場合は、勝者になる可能性があります。

于 2010-11-18T11:24:07.393 に答える
1

これが私が昨日思いついたC++デザインパターンです:ポリシーを支持して継承を捨てる

于 2010-11-18T11:52:29.647 に答える
1

あなたが言ったように、明らかなことがあります:

  • 名前の変更は1つです
  • 関数のシグネチャを変更することは別です(特に、関数はほぼ必然的に複製されるため:ヘッダーでの宣言とソースでの実装)
  • ファイルの名前変更/移動(インクルードディレクティブの更新)

これは基本的なことですが、うまく処理されることはめったにないことに注意してください。私の主な不満は、コメントは一般的に更新されないということです(私はdoxygenの自動生成された役に立たないクラッターについては話していません)。したがって、ヘッダー内でのクラスの使用、または別のソースファイルでこのクラスを使用する理由を説明していた場合、クラスの名前を変更すると、それが何を指しているのか誰にもわからなくなるため、コメントは廃止されます...

ただし、もっと興味深いケースがあります。

  • 関数のシグネチャを変更するときは、すべての呼び出しサイトを更新する必要があります。開発者は、それらをローカライズするための支援が必要になります。
  • 継承により、階層のすべてのクラスに作用する機能:関数シグネチャの変更(もう一度)または仮想オーバーライドの追加/削除。
  • テンプレートの場合:コンセプト提案が削除されたので、渡されたタイプ(必要なメソッド/内部タイプ)の要件を合成して、それらの要件を変更するときに(テンプレート定義を変更することによって)リストが通知されるようにするとよいでしょう。このテンプレートで使用されていて、もはやそれに準拠していない(そして更新される)クラスの数。タイプ/メソッドの名前を変更するだけの場合は、他に何も壊れない限り、変更を自動的に伝播することができます。

幸運を...

于 2010-11-18T13:25:55.370 に答える
1

私がサポートしたいと思っているリファクタリングの1つは、実際には注入メソッドです。多かれ少なかれ抽出方法の反対です。

おそらく、結果のコードをより明確または効果的に再配置できることがわかります。しかし、現在、これに対するツールのサポートがあることを私は知りません。

于 2010-11-18T13:31:33.420 に答える
0

こんにちは私はこのツールでhttp://www.devexpress.com/Products/Visual_Studio_Add-in/RefactorCPP/を使用します私は変数/クラス/メソッドの名前を変更し、関数本体、イニシャライザーを変更します

于 2010-11-18T11:18:21.200 に答える