5

这是我的问题:

我有一个大型代码库,其中所有类名都以 Agui 开头。例如:

class AguiWidget
{

};

class AguiBitmap
{

};

此外,所有的 hpp 和 cpp 文件也都这样命名:AguiWidget.hpp

等等

该库也不使用命名空间。

所有枚举都开始并使用 Agui:例如:

enum AguiKeyEnum
{
   AGUI_KEY_SPACE,
   AGUI_KEY_ENTER
};

包含守卫也使用 ex: AGUI_WIDGET_HPP

所以,

我的任务是从整个项目(所有类和枚举)中删除所有 Agui、AGUI 引用,然后将所有类封装到命名空间 agui 中。

什么是最简单的方法来做到这一点。我还需要 hpp 和 cpp 文件的文件名中不再包含 Agui。

如果有帮助,我会使用 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 回答