Pfad des ifstream Objects mit dem dieses Instanziiert wurde



  • Was heißt leeres Lambda? Deine Lambda Funktion muss natürlich ein Parameter vom Typ const Point3D& erwarten, sonst passt das nicht.



  • Schlangenmensch schrieb:

    Was heißt leeres Lambda? Deine Lambda Funktion muss natürlich ein Parameter vom Typ const Point3D& erwarten, sonst passt das nicht.

    hatte zunächst []{} als lambda verwendet und dann

    std::transform(std::istream_iterator<Point3D>{ inputFile },
                    std::istream_iterator<Point3D>{},
                    std::back_inserter(pointClouds[cloudName]), [](const Point3D& p){});
    

    ... muss natürlich als return nen Point3D machen 🙄



  • [](const Point3D& p){};
    

    erwartet ein Point3D als Übergabeparameter und gibt nichts zurück.

    Mit Rückgabe sähe das so aus:

    [](const Point3D& p)->Point3D{return Point3D};
    

    //Edit: mit Rückgabewert muss das Lambda natürlich auch ein entsprechendes return Statement haben...



  • danke, hatte mich nur gewundert, wieso

    std::transform(std::istream_iterator<Point3D>{ inputFile }, 
                    std::istream_iterator<Point3D>{}, 
                    std::back_inserter(pointClouds[cloudName]), [](const Point3D& p){});
    

    nicht funktioniert



  • Schlangenmensch schrieb:

    Mit Rückgabe sähe das so aus:

    [](const Point3D& p)->Point3D{return Point3D};
    

    //Edit: mit Rückgabewert muss das Lambda natürlich auch ein entsprechendes return Statement haben...

    Wobei: ich gebe in der Regel den Rückgabetyp nicht explizit an, denn er ergibt sich ja sowieso aus dem return-Statement des Lambdas. (und wenn das Lambda so groß und kompliziert ist, dass es einen expliziten Returntyp braucht, ist in sehr wahrscheinlich zu viel Code im Lambda, das möglichst sehr simpel gehalten werden sollte)



  • ist ja ne simple struct um die es hier geht, mich wundert nachwie vor, wieso das lambda nicht einfach nen Point3d by reference nehmen kann und damit nichts macht, das heißt, der lambda rumpf ist leer.Dann müsste std::transform doch äquivalent mit std::copy sein. Nur das scheint nicht zu funktionieren



  • Warum sollte das gehen? Woher soll der Compiler wissen, in welchen Typ du transformieren willst?

    Du kannst auch nicht

    void foo(const int &i) { }
    ...
    some_type j = foo(i);
    

    schreiben. Das geht nicht, da muss foo schon some_type returnen. Oder erwartest du hier auch, dass aus dem "void foo" auf magische Weise ein "some_type foo" wird, das ebenfalls auf magische Weise nun den Body "return i;" bekommt?



  • leuchtet ein ; ) vielen Dank wob

    wie schätzt ihr denn das code beispiel auf den Bildern ein, die ich angehängt habe?



  • Sewing schrieb:

    wie schätzt ihr denn das code beispiel auf den Bildern ein, die ich angehängt habe?

    Wenn Du in den Dateien

    [std::string key] [struct value{std::string, std::size_t}]

    hättest, anstatt kein Key und

    [struct value{doube, double, double]

    täte der toll.



  • das war das was ich auf Seite 1 meinte. Bei mir nicht praktikabel, weil der key nicht in meinen files ist, ssondern von außerhalb kommt.

    Ich danke euch vielmals für eure Hilfe, habe wieder viel gelernt. Danke


Anmelden zum Antworten