帮助在 C++ 中自动重命名

发布于 2024-11-01 21:12:39 字数 545 浏览 0 评论 0原文

这是我的问题:

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

class AguiWidget
{

};

class AguiBitmap
{

};

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

等。

该库也不使用命名空间。

所有枚举都以 Agui 开头并使用: ex:

enum AguiKeyEnum
{
   AGUI_KEY_SPACE,
   AGUI_KEY_ENTER
};

包含守卫也使用 ex: AGUI_WIDGET_HPP

所以,

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

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

如果有帮助的话,我使用 MSVC 2008 作为 IDE。

谢谢!

Here is my issue:

I have a large library of code where all of the class names begin with Agui. For example:

class AguiWidget
{

};

class AguiBitmap
{

};

also, all the hpp and cpp files are named like this also:
AguiWidget.hpp

etc.

The library also does not use a namespace.

all of the enums begin and use Agui:
ex:

enum AguiKeyEnum
{
   AGUI_KEY_SPACE,
   AGUI_KEY_ENTER
};

The include guards also use ex:
AGUI_WIDGET_HPP

So,

My task is to remove all the Agui, AGUI references from the entire project (all the classes and enums), then to encapsulate all the classes into namespace agui.

What would be the easiest way to do this. I also need the hpp and cpp files to no longer have Agui in the filename.

I use MSVC 2008 as an IDE if that helps.

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

因为看清所以看轻 2024-11-08 21:12:40

您需要使用全局查找和替换工具。如果您有 Visual Studio 2008,那么它已经是内置的。重命名所有类和命名空间后,请使用其他工具重命名文件或构建脚本来为您完成此操作。

You need to use a global find and replace tool. If you have Visual Studio 2008, then it is already built-in. Once you rename all the classes and namespaces, then use another tool to rename the files or build a script to do it for you.

落花浅忆 2024-11-08 21:12:40

作为 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(我没用过这个)。

As a Linux user (which you aren't, but you could use Cygwin or a separate machine), I'd use the program sed to strip the prefixes. I'd start with this, then review the diffs vs. source control:

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

Then, renaming the files:

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

Then all that's left is to add namespacing. You could probably get this done using sed as well, but if the number of files is not huge I'd just do it by hand. The namespace closing braces are trivial to add though:

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

The opening braces you might want to take a little more care to add, depending on your existing code's structure.

Oh, and look, sed for Windows: http://gnuwin32.sourceforge.net/packages/sed.htm (I haven't used this).

等风也等你 2024-11-08 21:12:40

我建议使用

cygwin + 递归查找 + 脚本 - 使用 sed 更改名称,mv 更改文件

或弄清楚如何在 powershell 中执行等效操作。

使用正确的正则表达式应该可以正常工作。

确保在编辑之前复制整个目录结构,因为可能需要几次迭代来调试。

I would suggest either using

cygwin + recursive find + script - use sed for changing names, mv to change files

or figuring how to do the equivalent in powershell.

With the right regular expressions it should work fine.

Make sure to copy the entire directory structure before editing, as it may take a few iterations to debug.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文