Рефакторинг C ++: условное расширение и устранение блоков

Я нахожусь в процессе рефакторинга очень большого объема кода, в основном C ++, для удаления ряда временных проверок конфигурации, которые постоянно установлены на заданные значения. Так, например, у меня был бы следующий код:

<code>#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
}
</code>

где вызовы value возвращают либо bool, либо int. Поскольку я знаю значения, которые эти вызовы всегда возвращают, я сделал некоторую подстановку регулярных выражений, чтобы расширить вызовы до их нормальных значений:

<code>// 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
}
</code>

Обратите внимание, что, хотя значения являются фиксированными, они не устанавливаются во время компиляции, но читаются из общей памяти, поэтому в настоящее время компилятор не оптимизирует ничего за кадром.

Несмотря на то, что результирующий код выглядит немного глупо, этот подход регулярных выражений позволяет добиться многого, чего я хочу, поскольку он прост в применении и устраняет зависимость от вызовов, при этом не изменяя поведение кода и, вероятно, компилятор также может затем оптимизировать многие из них, зная, что блок никогда не может быть вызван, или проверка всегда вернет true. Это также позволяет довольно легко (особенно если сравнивать с контролем версий) увидеть, что изменилось, и сделать последний шаг по его очистке, чтобы код, приведенный выше, в конечном итоге выглядел следующим образом:

<code>// do something

// DONT do more stuff (b being false always prevented this)

// more stuff again
</code>

Проблема в том, что мне нужно внести сотни (возможно, тысячи) изменений, чтобы перейти от второго, правильного, но глупого этапа к окончательному очищенному коду.

Я задавался вопросом, знает ли кто-нибудь об инструменте рефакторинга, который мог бы справиться с этим или о любых методах, которые я мог бы применить. Основная проблема состоит в том, что синтаксис C ++ делает полное раскрытие или исключение довольно трудным для достижения, и есть много изменений в приведенном выше коде. Я чувствую, что мне почти нужен компилятор, чтобы иметь дело с вариацией синтаксиса, которую мне нужно будет охватить.

Я знаю, что были подобные вопросы, но я не могу найти какое-либо требование, подобное этому, и также удивляюсь, появились ли какие-либо инструменты или процедуры с тех пор, как их спросили?

Ответы на вопрос(2)

Ваш ответ на вопрос