这是我的问题:
我有一个庞大的代码库,所有的类名都以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。
谢谢!
答案 0 :(得分:2)
您需要使用全局查找和替换工具。如果您有Visual Studio 2008,那么它已经内置。重命名所有类和名称空间后,请使用其他工具重命名文件或构建脚本以便为您完成。
答案 1 :(得分: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
根据您现有代码的结构,您可能需要更加谨慎地添加开头部分。
哦,看看,sed for Windows:http://gnuwin32.sourceforge.net/packages/sed.htm(我没有用过这个)。
答案 2 :(得分:0)
我建议使用
cygwin +递归查找+脚本 - 使用sed更改名称,使用mv更改文件
或计算如何在powershell中执行等效操作。
使用正确的正则表达式,它应该可以正常工作。
确保在编辑之前复制整个目录结构,因为可能需要几次迭代才能进行调试。