Als relativer c++-Anfänger versuche ich mich gerade an einem sourceforge-Projekt. Da bin ich nun auf ein paar Zeilen gestoßen, deren Notation ich nicht begreife.
Es geht um die farbig markierten Bereiche. Der Code liegt innerhalb einer ganz normalen Klassenfunktion.
Offensichtlich werden hier Funktionen, bzw. Methoden definiert! Denn wenig später werden diese aufgerufen, z.B. so:
Ich vermute daher, dass z.B. der blau gezeichnete Bereich eine andere Schreibweise für eine Methodendefinition ist, also für den blauen Bereich in etwa gleichbedeutend mit:
Aber wozu dienen dann die Bereiche in den eckigen Klammern? Ich kenne diese Klammern nur als Operatoren für Arrays... konnte auch nicht entdecken, dass dieser Operator hier irgendwie überladen wäre. Warum nimmt der Teil in den eckigen Klammern mal Bezug auf [this], also ein Objekt, mal auf [B], also etwas so eben definiertes (Methode?), und dann sowohl auf ein Objekt als auch auf eine Referenz [this,&progress]... ich versteh's einfach nicht. Bin dankbar für jede Hilfe!
Es geht um die farbig markierten Bereiche. Der Code liegt innerhalb einer ganz normalen Klassenfunktion.
Code:
auto B = [this] (int keynumber) { return mKeys[keynumber].getMeasuredInharmonicity(); }; auto cents = [B] (int keynumber, int n) { return 600.0 / MathTools::LOG2 * log((1+n*n*B(keynumber))/(1+B(keynumber))); }; auto setValue = [this,&progress](int k, double value) { msleep(20); mInitialPitch[k] = value; progress += 1.0 / mNumberOfKeys; showCalculationProgress(progress); };
Code:
double pitchA5 = cents(numberA4,2); setValue(k,pitchA3*(mKeyNumberOfA4-k)/12.0);
Code:
void setValue (int k, double value){...}
Comment