Abhängige Variablen in C ++?

7

Ich habe versucht, vorher zu fragen, aber ich war nicht sehr klar, also frage ich es erneut.

Ich möchte eine Variable haben, die vom Wert einer anderen Variablen abhängt, wie in diesem Beispiel b:

%Vor%

Natürlich existiert das nicht in C ++, aber das ist was ich will.

Also habe ich stattdessen versucht, eine Funktion zu erstellen:

%Vor%

Das oben genannte funktioniert nicht, da C ++ keine verschachtelten Funktionen zulässt.

Ich kann nur Funktionen außerhalb von main () wie folgt machen:

%Vor%

Aber das funktioniert nicht, weil a nicht im selben Umfang wie b () ist, also müsste ich als Parameter übergeben und das möchte ich nicht.

Gibt es Tricks, um etwas Ähnliches wie eine abhängige Variable in C ++ zu bekommen?

    
john smith 29.07.2011, 05:26
quelle

9 Antworten

9

Was Sie brauchen, ist eine Schließung . Wenn Sie C ++ 0x-Funktionen verwenden können, haben Sie Glück. Andernfalls können Sie manuell eine definieren:

%Vor%

Sie können auch B in main definieren, aber einige Compiler würden es nicht mögen.

Die Syntax C ++ 0x Lambda sieht folgendermaßen aus:

%Vor%

Das [&] bedeutet, dass das Lambda lokale Variablen als Referenz erfasst.

    
Don Reba 29.07.2011, 05:36
quelle
6

Wenn Sie C ++ 0x (GCC 4.5+, Visual C ++ 2010) verwenden, können Sie lambdas verwenden:

%Vor%

Je nachdem, was Sie gerade tun, gibt es wahrscheinlich sauberere Lösungen - möglicherweise eine Variation der klassischen "Methode, die 'a' übernimmt und 'b'" zurückgibt.

    
Chris W. 29.07.2011 05:34
quelle
3

Sie könnten eine Klasse definieren, die ein Mitglied a und dann eine Funktion b () hat, die den Wert a + 1 zurückgibt. Eine grundlegende Implementierung wäre etwa:

%Vor%

Sie können das Überladen von Operatoren nach Bedarf hinzufügen, damit es mehr wie normale Ganzzahlen funktioniert, wenn Sie dies wünschen.

    
Colen 29.07.2011 05:29
quelle
2

Dies ist möglich, wenn Sie Lambda-Funktionen (c ++ 0x) verwenden, weil sie lokale Variablen erfassen können.

Beispiel:

%Vor%

Ergebnis:

%Vor%

( Ссылка zum Nachweis)

    
Sean 29.07.2011 05:33
quelle
2

Ein einfacher Ansatz besteht darin, Preprozessor-Makros zu verwenden, aber nichts C ++ -spezifisches:

%Vor%     
Steve-o 29.07.2011 05:35
quelle
1

Können Sie C ++ 0x verwenden? wenn ja,

%Vor%

Da es nicht mit C ++ 0x markiert ist, können Sie geschachtelte Klassen anstelle von verschachtelten Funktionen verwenden. Diese Spalte von Herb sutter würde dir für existierendes c ++ helfen. Ссылка

    
Jagannath 29.07.2011 05:33
quelle
0
  

Das oben genannte funktioniert nicht, da C ++ keine verschachtelten Funktionen zulässt.

Sie können das mit einer verschachtelten Struktur simulieren. In C ++ 0x können Sie die Lambda-Funktion verwenden, die die gleichen Funktionen innerhalb der Funktion bietet.

    
iammilind 29.07.2011 05:32
quelle
0

Definieren Sie eine Klasse namens LinkedInt oder etwas, das sich wie ein int verhält, aber eine RelatedTo-Beziehung für sich selbst und ein zusätzliches Member hat, das ein Funktionszeiger auf die auszuwertende Funktion ist, wenn der Wert der ganzen Zahl berechnet wird. Ziemlich einfach. Lassen Sie es mich wissen, wenn Sie einige Hinweise auf die Codierung benötigen.

Die kurze Antwort ist, dass OOP mehr als genug ist, um dieses Problem zu begraben.

    
Patrick87 29.07.2011 05:34
quelle
0
  

Ich möchte eine Variable haben, die vom Wert eines anderen abhängt   Variable, wie b in diesem Beispiel:

Ich sehe, dass Sie nur eine Referenzvariable brauchen:

%Vor%

Warum C ++ 0x Lambda dafür kommen, verstehe ich nicht.

    
Ajay 29.07.2011 06:05
quelle

Tags und Links