C ++ Refactoring: Bedingte Erweiterung und Blockeliminierung

Ich bin dabei, eine sehr große Menge an Code, hauptsächlich C ++, umzugestalten, um einige temporäre Konfigurationsprüfungen zu entfernen, die permanent auf vorgegebene Werte gesetzt wurden. Zum Beispiel hätte ich den folgenden Code:

<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>

Dabei geben die Aufrufe von value entweder einen Bool oder einen Int zurück. Da ich die Werte kenne, die diese Aufrufe immer zurückgeben, habe ich eine Regex-Ersetzung vorgenommen, um die Aufrufe auf ihre normalen Werte zu erweitern:

<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>

Beachten Sie, dass die Werte zwar festgelegt sind, jedoch nicht zur Kompilierungszeit festgelegt, sondern aus dem gemeinsam genutzten Speicher gelesen werden, sodass der Compiler im Hintergrund derzeit keine Optimierung vornimmt.

Obwohl der resultierende Code ein bisschen doof aussieht, erreicht dieser Regex-Ansatz eine Menge von dem, was ich möchte, da er einfach anzuwenden ist und die Abhängigkeit von den Aufrufen beseitigt, ohne das Verhalten des Codes zu ändern. Außerdem ist es wahrscheinlich, dass der Compiler dann a optimiert Viele wissen, dass ein Block niemals aufgerufen werden kann oder ein Check immer true zurückgibt. Es macht es auch einigermaßen einfach (insbesondere, wenn es sich um einen Unterschied zur Versionskontrolle handelt), zu sehen, was sich geändert hat, und den letzten Schritt der Bereinigung vorzunehmen, sodass der Code über dem Code schließlich wie folgt aussieht:

<code>// do something

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

// more stuff again
</code>

Das Problem ist, dass ich Hunderte (möglicherweise Tausende) von Änderungen vornehmen muss, um von der zweiten, korrekten, aber doofen Phase zum endgültig bereinigten Code zu gelangen.

Ich fragte mich, ob irgendjemand ein Refactoring-Tool kannte, das dies oder andere Techniken, die ich anwenden könnte, handhaben könnte. Das Hauptproblem ist, dass die C ++ - Syntax eine vollständige Erweiterung oder Eliminierung ziemlich schwierig macht und es viele Permutationen für den obigen Code gibt. Ich glaube, ich brauche fast einen Compiler, um mit der Variation der Syntax fertig zu werden, die ich behandeln müsste.

Ich weiß, dass es ähnliche Fragen gab, aber ich kann keine Anforderungen wie diese finden und habe mich auch gefragt, ob Tools oder Verfahren entstanden sind, seit sie gestellt wurden.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage