Anfängerfrage zu Unterfunktion



  • Ich komme von Delphi und will mich gerade ein wenig mit C++ anfreunden.

    Ist es möglich, innerhalb einer Prozedur/Funktion eine Unterprozedur/-funktion zu schreiben, die nur innerhalb dieser zu sehen ist?

    In Pascal geht das sinngemäß so:

    procedure IchBinHauptproc(parameter: TypXYZ);
      function ichMacheWas(i: Integer): Boolean;
      begin
        Result:=(i Mod 10)=2;
      end;
    var bool: Boolean;
    begin
       bool:=ichMacheWas(i);
    end;
    

    Innerhalb dieser Unterproc/-func kann man wieder Unterprocs schreiben bis zu beliebiger Verschachtelungstiefe.

    Ich habe es schon mit struct probiert, was zumindest als Prozedur irgendwie funktioniert (aber wahrscheinlich nicht dafür gedacht ist), als Funktion bekomme ich es nicht hin.



  • Warum soll das nur innerhalb einer Funktion sichtbar sein? Das wird doch im Code total unübersichtlich. Mach lieber eine Funktion im anonymen Namespace der cpp-Datei.

    namespace {
    void MyAnonymousFunction()
    {
    // do something
    }
    
    }
    
    void MyPublicFunction()
    {
    MyAnonymousFunction();
    }
    


  • Nein, das geht nicht, C++ erlaubt keine nested Funktionen. Allerdings kannst du seit C++11 lamdas nutzen:

    int main()
    {
        auto nested_fun = []() { return 123; };
        cout << nested_fun();
    }
    

    Aber mach nicht den Fehler, Delphi-Paradigmen über C++ zu stülpen, das geht meistens schief.



  • Es ist mir klar, dass ich das als 'normale' Proc/Func schreiben kann. Im Sinne einer klareren Programmstruktur möchte ich mehrfach wiederkehrende Ops, die wirklich nur INNERHALB einer ganz bestimmten Proc relevant sind, auch nur auf diese Sichtbarkeitsebene beschränken.

    Bei einem 200-Zeiler bestimmt irrelevant, aber bei richtig vielen Procs erhöht das m.E. die Lesbarkeit und das Verständis enorm.

    Deshalb wüsste ich gern, ob es möglich ist, Unterprocs zu schreiben, und wenn ja: Wie.



  • @zappa2 sagte in Anfängerfrage zu Unterfunktion:

    Deshalb wüsste ich gern, ob es möglich ist, Unterprocs zu schreiben, und wenn ja: Wie.

    Nein, das ist nicht möglich.

    Wie @out schon gezeigt hat, kann man aber etwas ähnliches mit Lambdas machen.



  • @out
    Vielen Dank für die Info! Klare Aussage: es geht nicht. Verstanden 😉

    Es gibt schon einiges, was ich in C++ eleganter finde, als in Pascal: bspw. Array-Deklarationen. Anderes fehlt mir.

    Aber Du hast natürlich vollkommen Recht: C++ ist nicht Delphi/Pascal.

    Allen noch mal vielen Dank!



  • @zappa2
    Schau dir das Method Object Pattern an.

    Wenn es gross genug wird es unübersichtlich zu finden wenn da ein paar "normale" Hilfsfunktionen sind die nur von der einen Funktion verwendet werden, dann ist es vermutlich gerechtfertigt das ganze in ein Method Object zu verwandeln.



  • Sorry, noch mal kurz ich.

    Die Lambdas sind doch genau das, was ich gesucht habe!

    Man kann mit denen sogar CallByReference - was will man mehr?!

    Kurz, klein => fein! Und funzt wunderbar 🙂

    Nochmals vielen Dank!



  • Ernsthaft: Schau dir das Method Object Pattern an!