boost::lambda - Konstruktor aufrufen



  • Hi!

    Wie kann ich folgendes it boost::lambda (o.ä.) realisieren?

    const std::vector<vigra::Point2D> cont = voids[i]->getContour();
    QVector<QPoint> pp;
    std::transform(cont.begin(), cont.end(), std::back_inserter(pp), QPoint((*_1).x, (*_1).y));
    

    ich möchte also die elemente aus dem einen Vektor in elemente des anderen Vektors umwandeln. So gehts leider nicht, kommt der Fehler hier:

    >.\src\TaskVisualizer.cpp(98) : error C2039: 'x' : is not a member of 'boost::lambda::lambda_functor<T>'
    

    Kann man das irgendwie machen?



  • Wenn ich das richtig im Kopf habe,

    bind(constructor<QPoint>(), bind(&Point2D::x, _1), bind(&Point2D::y, _2))
    

    Mit bind und constructor in boost::lambda.



  • Dankeschön! Klappt fast so, nur _1 auch im zweiten Parameter verwenden:

    bind(constructor<QPoint>(), bind(&vigra::Point2D::x, _1), bind(&vigra::Point2D::y, _1)));
    


  • Fragt sich wahrscheinlich nur, ob sich das in Bezug auf Codeverständlichkeit noch lohnt.. 😮



  • Da freut man sich jedenfalls auf C++0x built-in lambda expressions.


Anmelden zum Antworten