sort(mMyClassVector.begin(), mMyClassVector.end(),
[](const MyClass & a, const MyClass & b)
{
return a.mProperty > b.mProperty;
});
Ich möchte eine Lambda-Funktion verwenden, um benutzerdefinierte Klassen zu sortieren, anstatt eine Instanzmethode zu binden. Der obige Code liefert jedoch den Fehler:
Fehler C2564: 'const char *': Eine Konvertierung im Funktionsstil in einen integrierten Typ kann nur ein Argument annehmen
Es funktioniert gut mit boost::bind(&MyApp::myMethod, this, _1, _2)
.
Antworten:
Verstanden.
Ich nahm an, es würde sich herausstellen, dass der Operator> einen Bool zurückgegeben hat (gemäß Dokumentation). Aber anscheinend ist es nicht so.
quelle
operator>
dann.a.mProperty>b.mProperty
sein soll, ergibt sich definitiv ein Bool.operator<
, nichtoperator>
?<
, bei aufsteigender Standardreihenfolge. Ich habe die Antwort bearbeitet, um zu verdeutlichen, dass es sich um eine absteigende Sorte handelt, aber anscheinend war meine Bearbeitung nicht hilfreich und wurde gelöscht!Zu viel Code können Sie folgendermaßen verwenden:
Ersetzen Sie "vec" durch Ihre Klasse und das wars.
quelle
Kann das Problem bei der Zeile "a.mProperty> b.mProperty" liegen? Ich habe den folgenden Code zum Laufen gebracht:
Die Ausgabe ist:
quelle