我正在重构大量代码,主要是 C++,以删除一些已永久设置为给定值的临时配置检查。因此,例如,我将有以下代码:
#include <value1.h>
#include <value2.h>
#include <value3.h>
...
if ( value1() )
{
// do something
}
bool b = value2();
if ( b && anotherCondition )
{
// do more stuff
}
if ( value3() < 10 )
{
// more stuff again
}
其中对 value 的调用返回 bool 或 int。因为我知道这些调用总是返回的值,所以我做了一些正则表达式替换来将调用扩展到它们的正常值:
// where:
// value1() == true
// value2() == false
// value3() == 4
// TODO: Remove expanded config (value1)
if ( true )
{
// do something
}
// TODO: Remove expanded config (value2)
bool b = false;
if ( b && anotherCondition )
{
// do more stuff
}
// TODO: Remove expanded config (value3)
if ( 4 < 10 )
{
// more stuff again
}
请注意,虽然这些值是固定的,但它们不是在编译时设置的,而是从共享内存中读取的,因此编译器当前没有在幕后优化任何东西。
虽然生成的代码看起来有点傻,但这种正则表达式方法实现了我想要的很多东西,因为它应用简单并且消除了对调用的依赖,同时不会改变代码的行为,而且编译器也可能会优化一个很多事情都知道永远不会调用一个块,否则检查将始终返回 true。它还可以相当容易地(尤其是在针对版本控制进行差异化时)查看发生了什么变化并采取最后的清理步骤,因此上面的代码最终如下所示:
// do something
// DONT do more stuff (b being false always prevented this)
// more stuff again
问题是我要从第二个正确但愚蠢的阶段进行数百次(可能数千次)更改才能获得最终的清理代码。
我想知道是否有人知道可以处理此问题的重构工具或我可以应用的任何技术。主要问题是 C++ 语法使得完全扩展或消除很难实现,并且上面的代码有很多排列。我觉得我几乎需要一个编译器来处理我需要涵盖的语法变化。
我知道有类似的问题,但我找不到任何类似的要求,并且想知道在被问到之后是否出现了任何工具或程序?