自动源代码替换
我正在寻找一个工具,正则表达式或其他魔术来做一些重码替换。
理想情况下,我可以用保存参数的函数调用来替换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