2010-11-18 14 views
5

私は、既存の自動化されたC++リファクタリングツールの比較表を作成するだけでなく、フリーでオープンソースなツールの作成能力を探求します。どのC++リファクタリングを実際に使用していますか?

私の質問は:どのようなリファクタリングを日常業務に実際に使用していますか?変数/クラス/メソッドの名前を変更するなどの明白なことがありますが、テンプレート、STL、コピーコンストラクタ、イニシャライザなどを扱うなど、C++固有のものがありますか?

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

ありがとうございます。

+3

このようなツールを動作させるためにまともなC++パーサを作成することを幸運にします。 –

+0

私はC++で開発していましたが、IDEから多くのリファクタリングサポートを使用しませんでした。単に私が本当に役に立つと思ったものはありませんでした。私のアドバイスは、あなたのデザインパターンを学ぶことです.MeyerのEffective C++と101のコーディング基準を読んでください。最初から多かれ少なかれそれをやることを学ぶ。 –

+0

@Daniel:リファクタリングは、プログラムが何であれ、開発者の主なツールです。 KISSの原則に沿って、あなたはパターンのためだけにダイビングするのではなく、ちょうどあなたが必要とするものだけを断片的に使用してください。 –

答えて

1

あなたは明らかなものであると述べているとおり

  • リネーミング機能署名が別のある変更1
  • ある(関数はほぼ必ず複製され、特に以来:ソースのヘッダに宣言と実装)
  • /ファイルを移動する(含めるディレクティブの更新)それは基本だが、それはめったにうまく扱っていないということ

ノートの名前を変更します。私の主な不満は、コメントは一般的には更新されないということです(私はdoxygenが自動生成した無駄な混乱については話していません)。だから、ヘッダー内でのクラスの使用、またはこのクラスを別のソースファイルで使用することの正当性について説明していれば、そのクラスの名前を変更することによって、今ではコメントが廃止されました...

しかし、はるかに興味深い例があります。

  • 関数のシグネチャを変更する場合、あなたはすべての呼び出しサイトを更新する必要があるが、開発者が上作用する能力、相続で
  • それらをローカライズするための助けが必要になります関数シグニチャの変更(もう一度)、または仮想オーバーライドの追加/削除。
  • テンプレート:概念提案が削除されました。渡された型(メソッド/内部型が必要)の要件を合成して、それらの要件を変更するとき(テンプレート定義を変更することによって)このテンプレートによって使用されており、もはやそれに適合しない(そして更新される)クラスのリストのリスト。タイプ/メソッドの名前を変更するだけの場合は、それ以外のものが壊れていない限り、自動的に変更を伝播することをお勧めします。

幸運...私はサポートされていた希望

+0

ちょうど名前を変更するのは難しいです。私をJに改名することを想像してみてください...私は宣言と私の使用(「シャドーイング」)の間の範囲にJがあります。これには、複数の継承を持つ介入スコープが含まれます。 Jは、実際の介入範囲宣言に明示的に現れていないこともあります。楽しい。 –

1

昨日私が思いついたC++のデザインパターンは、です。ポリシーに賛成するディッチ継承です。

+1

初めて私が読んだのは、**政治**を支持して* Ditchの遺産を思いついたことです。* –

+0

アレクサンドルスクがあなたの前にそれを思い付いたか、どのように良い政策どこですか? –

+2

ポリシーは継承を使用します。 – StackedCrooked

1

一つのリファクタリングは、実際に注入方法です。多かれ少なかれ逆の方法を抽出します。

おそらく私は、結果のコードをより明確にまたは効果的に並べ替えることができます。私は現在、このためのツールのサポートがあることを認識していません。

2

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

私は知っているVSのための視覚アシストです。

関連する問題