web-dev-qa-db-ja.com

Visual C ++にはリファクタリング機能がないのはなぜですか?

Visual Studio 2008でC++でプログラミングする場合、C#を使用しているときにリファクタリングメニューに表示されるような機能がないのはなぜですか?

Renameを常に使用していますが、実際に存在しない場合は本当に見逃しています。これを提供するプラグインを入手できると確信していますが、C++を使用するときにIDEに統合されないのはなぜですか? ?

78
xyz

C++の構文とセマンティクスにより実現 信じられないほど難しい リファクタリング機能を正しく実装します。ケースの90%をカバーする比較的単純なものを実装することは可能ですが、残りの10%のケースでは、そのシンプルなソリューションは決して変更したくないものを変更してコードをひどく壊してしまいます。

http://yosefk.com/c++fqa/defective.html#defect-8 を読んで、C++のリファクタリングコードが対処しなければならない問題の簡単な説明を読んでください。

マイクロソフトは明らかに、C++のこの特定の機能をパントすることを決定し、サードパーティの開発者にできることを任せています。

70
JSBձոգչ

このような理由はわかりませんが、サードパーティ製のツールが存在します。たとえば、現在、私は Visual Assist X (Whole Tomatoによる)を評価しています。 Visual Studio 2005も使用しています。

11
Brian

devexpress はアドインを提供します C++のリファクタリング! VS2005およびVS2008の場合。

5
mem64k

苦労しないでください。VB.Netでも利用できません:)

C++は、C#と比較して解析するHARD言語です(「Option Explicit」および「Option Strict」をオンにしない限り、VBも非常に大きなコンテキストでコード行が何を行っているかを正確に伝えることは困難です)。

推測では、それを提供する「難しさ」と関係があるかもしれません。

追伸有用な情報を提供していないことがわかっているため、自分の回答をコミュニティWikiとしてマークしました。

4
Binary Worrier

Eclipseは、 'rename'を含むいくつかのc ++リファクタリングを行います。 StackOverflowのこちらの question をご覧ください。

EclipseでMicrosoftコンパイラを使用することもできます。 こちら をご覧ください。

Eclipseを試して、それがあなたに合うかどうか確かめてください。

4
fukanchik

この問題については多くの混乱と混乱があります。この驚くべきyoutubeビデオは、C++リファクタリングが難しい理由を明らかにするはずです。 https://www.youtube.com/watch?v=mVbDzTM21BQ

tl; dr Googleは、中間形式へのアクセスを可能にするコンパイラー(Clang + LLVM)を使用して、1億行のC++コードベース全体をリファクタリングします。

結論として、サードパーティはここにねじ込まれています。MSが中間結果を同じ方法で出力しない限り、サードパーティがVS C++をリファクタリングする現実的な方法はありません。プログラミング問題の観点から考えると、これは明らかです。VSC++をリファクタリングするには、VSが同じバグ、制限、欠陥、ハッキング、ショートカット、回避策などを使用してC++をまったく同じ方法でコンパイルできる必要があります。 。CoderushやResharperのような通常の容疑者は、そのような狂気のための予算を持っていませんが、明らかに彼らは試みていますが、それは何年もあります...

http://www.jetbrains.com/resharper-cpp/

更新2016:ResharperはC++リファクタリングで適切な仕事をするようになりました。制限は純粋に大規模/巨大なプロジェクト向けです。

3
Dirk Bester

MSは最終的にこれを行いました: https://channel9.msdn.com/Shows/C9-GoingNative/GoingNative-33-C-Refactoring-in-Visual-Studio-2015#time=04m37s

彼らはこれを約10年前に始めました。私はずっと前にms channel9を見ていたことを覚えています。

2

私は Visual Assist X をVisual Studioで約1年半使用しています。これは、通常のC++コードで多くの作業を支援する素晴らしいツールですが、テンプレートコードではあまりうまく機能しません。たとえば、洗練されたポリシーベースのテンプレートデザインがある場合、変数の名前を変更する方法がわからず、プロジェクトはコンパイルされなくなります。

1

その機能を有効にするプラグインをインストールします。 https://visualstudiogallery.msdn.Microsoft.com/164904b2-3b47-417f-9b6b-fdd35757d194

0
support_ms

Qt Creator(VC++ライブラリとビルドシステムと互換性のあるC++ IDE)は、非常にうまく機能するシンボル名の変更を提供することを指摘したいと思います。

プロジェクト内のすべてのファイルのシンボルの名前を変更できます。クラスの名前を変更するとき、クラス名に一致するファイル名を変更することもできます。

Qt Creator-リファクタリング:シンボルの名前変更

Qt Creatorの名前変更機能は、見つかったシンボル参照のリストと、置換を実行する前にそれらのいずれかを除外する機会を提供します。そのため、シンボル参照が間違っている場合は、除外できます。

Qt Creator Refactor Replace

したがって、C++シンボルの名前変更が可能です。 Qt CreatorからVSに来ると、かなりのサイズの既存のVSプロジェクトをQt Creatorを代わりに使用するように変換することを検討するまで、あなたの痛みを感じます。

私は、これがC++で特に難しいという議論を買いません。 Qt Creatorで既に非常にうまく機能しているという事実に加えて、コンパイラとリンカーがシンボルを見つけて一致させることができるという事実があります。それが不可能な場合、アプリケーションをビルドできませんでした。

実際、動的に型指定されるPythonなどの言語にも名前変更ツールがあります。変数型への明示的な参照がない言語用にこのようなツールを作成できる場合は、C++で確実に実行できます。

適例:

...ロープ、pythonリファクタリングライブラリ...いくつかの名前を変更してみましたが、期待通りに動作しました。

スタックオーバーフロー-Pythonで使用するリファクタリングツールは何ですか?

0
Terrabits