【发布时间】:2011-06-10 11:11:03
【问题描述】:
我有一个大型 C++ 代码库,其中包含几个我打算重写的用于错误记录的函数,定义如下;
void LogError(ErrorLevel elvl,LPCTSTR Format,...); // Literal version
void LogError(ErrorLevel elvl,UINT ResourceID,...); // Resource version
我打算将这些重写为一个函数
void LogError(ErrNo No,...);
在这种情况下,ErrNo 将是一个枚举,用于从外部文件中查找其余的错误详细信息。虽然我正在使用并喜欢 Visual Assist,但它似乎不适合这种事情。我认为执行此重构的最简单方法是编写一个小程序,该程序使用搜索输出的结果来查找此函数的所有出现,例如
c:\cpp\common\Atlas\Comps\LSADJUST.cpp
LSAFormNormalEquations (174): LogError(elvl_Error,IDS_WINWRN0058,i+1,TravObs.setup_no,TravObs.round_no
LSAFormNormalEquations (180): LogError(elvl_Error,IDS_WINWRN0059,i+1,TravObs.setup_no,TravObs.round_no
LSAFormNormalEquations (186): LogError(elvl_Error,IDS_WINWRN0060,i+1,TravObs.setup_no,TravObs.round_no
c:\cpp\common\Atlas\Comps\LSADJUSTZ.CPP
LSAFormNormalEquationsZ (45): LogError(elvl_Note,_T("Adjusting heights by least squares"));
c:\cpp\Win32\Atlas\Section\OptmizeSectionVolumes.cpp
OnSectionOptimizeVolumes (239): LogError(elvl_Note,"Shifted section at chainage %0.1lf by %0.3lf",Graph.c1,Offset);
然后解析和修改源。是否有任何其他工具可以为我简化这项任务?如果查看related question,则表明那里没有太多东西。我不介意花一点钱买一个相当容易使用的工具,但没有时间或预算做更多的事情。
【问题讨论】:
-
一次搜索有多少次点击?在这种情况下,我经常发现全局搜索加上 VS 宏已经很有帮助了。
-
@sbi - 1217 次点击。足以保证编写一些代码而不是手动执行。特别是考虑到我手动完成此类工作的注意力很短;)
-
如果你有一个列出所有这些的输出窗口,你可以使用快捷方式从一个到另一个(
F4for me),并使用另一个(Ctrl+Shift+Pfor我,您也许可以将F4合并到宏中)。这很简单,我想。我想我做了比这个更糟糕的替换。 -
我已经用 Codewright 的正则表达式搜索和替换做了类似的事情。不过要定期备份,因为一个错字很容易破坏整个代码集:-)
-
@Tony:如果没有 VCS 的备份,我不敢做这样的事情。
标签: c++ refactoring