Announcement

Collapse
No announcement yet.

Syntaxproblem

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Syntaxproblem

    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.


    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);
        };
    Offensichtlich werden hier Funktionen, bzw. Methoden definiert! Denn wenig später werden diese aufgerufen, z.B. so:

    Code:
    double pitchA5 = cents(numberA4,2);
    setValue(k,pitchA3*(mKeyNumberOfA4-k)/12.0);
    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:

    Code:
    void setValue (int k, double value){...}
    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!

  • #2
    Hallo,

    als "relativer C++-Anfänger" gleich ein Problem mit C++11 (oder 14) ? Aber dieser Punkt 4. der Seite http://www.thegeekstuff.com/2016/02/c-plus-plus-11/ dürfte bei den Klammern weiterhelfen.
    MfG
    Cheat-Sheets for Developers / Programming Quotes

    Comment


    • #3
      Vermutlich kann er als Anfaenger gar nicht einschaetzen ob das alte oder neue Sprachfeatures sind Mir sagt es auch nix und vor 7-8 Jahren habe ich auch noch viel C++ gemacht.

      Comment


      • #4
        Lambda-Funktionen, das war das Stichwort. Vielen Dank! Auch sonst für den link.

        Kommt davon, wenn man sich mal eben das Nötigste einer Sprache beibringen will, nur um an einer bestimmten Software mitzubosseln. Ich habe vorher nur Java und VB programmiert, und das ist auch schon 10 Jahre her. Oh, und in meiner verflossenen Jugend auch mal mit Assembler am c64 experimentiert. Was sich als durchaus hilfreich erweist, wenn man erst mal kapieren will, was ein Zeiger ist...

        C++ erscheint mir wie ne Art Computer-Analogie zum Lateinischen. Exquisite Mischung aus Antike und Moderne.

        Comment


        • #5
          das Nötigste einer Sprache
          Zumindest könnte man sich einige Grundlagen vorher betrachten: (ohne Werbung betreiben zu wollen)
          MVA - C++ : A General Purpose Language and Library Jump Start
          MVA - Einführung in Modern C++ (spez. Kapitel 3)
          MfG
          Cheat-Sheets for Developers / Programming Quotes

          Comment


          • #6
            Originally posted by rijukan View Post
            ...

            C++ erscheint mir wie ne Art Computer-Analogie zum Lateinischen. Exquisite Mischung aus Antike und Moderne.
            Ich glaube das triffts ganz gut wobei man oft nicht wirklich weiss ob es exquisit ist

            Comment

            Working...
            X