自动源代码替换

我正在寻找一个工具,正则表达式或其他魔术来做一些重码替换。

理想情况下,我可以用保存参数的函数调用来替换new运算符的所有实例。

我有什么选择?

更新:

例:

ClassA* a = new ClassA<int>(1,2,3,4,new ClassB(1,2),"horrible");

应该转化为:

ClassA* a = FUNCTION(ClassA<int>(1,2,3,4,FUNCTION(ClassB(1,2)),"horrible"));

FUNCTION将执行如下操作:

FUNCTION(...) Debug(new __VA_ARGS__, __FILE__)

一个简单的替换几乎没有问题,它只是缺少最后一个)

更新:

我最初的想法是使用宏跟踪一些额外的信息,如__FILE__ ,将其存储在std容器中,然后调用new。 如果容器调用新的,会发生什么? 如何在重载的新内容中添加__FILE__


你没有提到你为什么要这样做,但我想知道重载新操作符是否是更好的选择。

为什么要替换默认的新运算符和删除运算符?

编辑

以下链接也可能相关:

在c ++中重载新的和删除

覆盖关于调用者的“新”和记录数据

宏来替换C ++运算符new

http://blogs.msdn.com/b/calvin_hsia/archive/2009/01/19/9341632.aspx

这似乎是很多人之前解决的问题。 谷歌搜索overload|override new __line__ __file__将提出更多的可能性。


一些更可行的选择:

如果只有几个文件,您可以在IDE中简单地通过它们并使用CTRL + H查找和替换(谢谢Mark Garcia)

如果它是很多文件,你可以编写一个Perl脚本来查找和替换正则表达式(我建议Perl只是因为我发现正则表达式非常简单),这可以在一行中实际完成

perl -p -i -e 's/oldstring/newstring/g' `find ./ -name *.cpp`

从命令行运行此命令会将当前目录中每个.cpp文件中的oldstring的所有实例替换为newstring。 说实话,如果你只是用另一个单一的字符串替换“新”的所有实例,这可能是许多文件最直接的方式。 虽然这种情况不太可能发生,但是您可以随时将旧字符串更改为任何您想要的内容(例如,将'new Object'替换为createObject)

链接地址: http://www.djcxy.com/p/73045.html

上一篇: Automatic source code replacement

下一篇: defining variables in blocks of control structures