Wie man Code zwischen const und nicht-const Funktionen wiederverwendet, die andere Funktionen aufrufen

8

In diesem Beispielcode ist die Schleife innerhalb der beiden process() -Funktionen dupliziert. Der einzige Unterschied ist, dass einer const ist und der andere nicht.

Gibt es eine Möglichkeit, die Code-Duplizierung zu entfernen, so dass die Schleife nur einmal existiert? Dies ist nur ein Beispiel, aber im realen Code ist die Schleife ziemlich komplex, daher möchte ich aus Wartungsgründen nur einmal existieren.

%Vor%

Bitte beachten Sie, dass dies keine doppelte Frage ist. Die folgenden ähnlichen Fragen und Antworten sind unterschiedlich:

  • 123758 - deckt nur einfache Funktionen ab, die Werte zurückgeben, während diese Funktion andere Funktionen aufruft, so dass die dort angegebenen Lösungen für dieses Problem nicht funktionieren
  • 23809745 - das gleiche Problem, deckt nur einfach ab Funktionen, die Werte zurückgeben, Antworten funktionieren nicht für dieses Problem

Wenn ich die Lösung versuche, die in diesen Antworten gegeben wird, funktioniert es nicht, aber sieht so aus:

%Vor%

Dies ist ein vereinfachtes Beispiel, daher wäre es sehr zu begrüßen, wenn Antworten sich auf das Problem konzentrieren könnten (wie man die duplizierte Schleife aus den beiden process() -Funktionen entfernt), anstatt Kommentare über das Design - Änderungen am Design sind gut natürlich, wenn es die doppelte Schleife in dem Prozess entfernt.

    
Malvineous 25.09.2014, 00:16
quelle

4 Antworten

1

Ich gehe davon aus, dass die Sache, die Ihnen wichtig ist, ein const* an die Aktion weitergibt.

%Vor%

Wenn Sie nun nicht über C ++ 11 verfügen, schreiben Sie eine Merkmalsklasse:

%Vor%

kann sich auf mehrere verschachtelte Schleifen erstrecken.

    
Yakk 25.09.2014, 02:34
quelle
4

Versuchen Sie etwas wie folgt:

%Vor%

Natürlich könnten Sie in diesem vereinfachten Beispiel einfach std::for_each() verwenden:

%Vor%     
Remy Lebeau 25.09.2014 00:26
quelle
1

Sieht so aus, als ob Sie Daten als Teil der Vorlage erstellen, so wie es kompiliert wird ....

%Vor%

Bearbeiten - sollte auch ohne den bösen Cast funktionieren, wie;

%Vor%     
Soren 25.09.2014 00:31
quelle
0

Ich denke, die Funktion process ist wie ein "Proxy", um entsprechende Aktionen aufzurufen. Die Handhabung der Parameter und ob sie const sind gehört zu diesen Aktionen. So kann die Prozessfunktion vereinfacht werden (wenn c ++ 11 vorhanden ist):

%Vor%     
Edmund 25.09.2014 04:50
quelle

Tags und Links