5

これが私の問題です:

すべてのクラス名が Agui で始まるコードの大規模なライブラリがあります。例えば:

class AguiWidget
{

};

class AguiBitmap
{

};

また、すべての hpp および cpp ファイルも次のように命名されます: AguiWidget.hpp

ライブラリも名前空間を使用しません。

すべての列挙型は Agui を開始して使用します: 例:

enum AguiKeyEnum
{
   AGUI_KEY_SPACE,
   AGUI_KEY_ENTER
};

インクルード ガードも例を使用します: AGUI_WIDGET_HPP

そう、

私の仕事は、すべての Agui、AGUI 参照をプロジェクト全体 (すべてのクラスと列挙型) から削除してから、すべてのクラスを名前空間 agui にカプセル化することです。

これを行う最も簡単な方法は何でしょうか。ファイル名に Agui が含まれないようにするには、hpp ファイルと cpp ファイルも必要です。

それが役立つ場合は、MSVC 2008 を IDE として使用します。

ありがとう!

4

3 に答える 3

2

グローバルな検索と置換ツールを使用する必要があります。Visual Studio 2008 をお持ちの場合は、既に組み込まれています。すべてのクラスと名前空間の名前を変更したら、別のツールを使用してファイルの名前を変更するか、スクリプトを作成してそれを実行します。

于 2011-04-16T13:36:27.670 に答える
1

Linux ユーザー (あなたはそうではありませんが、Cygwin または別のマシンを使用できます) として、プログラムを使用しsedてプレフィックスを取り除きます。これから始めて、差分とソース管理を確認します。

sed -i 's/Agui//g; s/AGUI_//g' *.hpp *.cpp # and maybe *.sln *.proj

次に、ファイルの名前を変更します。

for f in *.hpp *.cpp; do mv $f ${f#Agui}; done # or source control's mv

あとは名前空間を追加するだけです。おそらくsedを使用してこれを行うこともできますが、ファイルの数がそれほど多くない場合は、手動で行うだけです。ただし、名前空間の右中括弧は簡単に追加できます。

for f in *.hpp *.cpp; do (echo '} // namespace agui' >> $f); done

既存のコードの構造によっては、もう少し注意して追加する必要がある左中かっこ。

ああ、見てください、Windows 用の sed: http://gnuwin32.sourceforge.net/packages/sed.htm (私はこれを使用していません)。

于 2011-04-16T13:41:26.260 に答える
0

どちらかを使用することをお勧めします

cygwin + 再帰的検索 + スクリプト - 名前の変更には sed を使用し、ファイルの変更には mv を使用します

または、powershellで同等のことを行う方法を考えています。

正しい正規表現を使用すると、正常に動作するはずです。

デバッグには数回の反復が必要な場合があるため、編集する前にディレクトリ構造全体をコピーしてください。

于 2011-04-16T13:35:42.127 に答える