[C++] teure Ressource in Lambda moven
Verfasst: 30.09.2018, 20:41
Hallo,
ich habe mal wieder ein C++-Problem. Ich habe ein Job-System, dem ich beliebige Callables zur Ausführung in diversen Threads übergeben kann. Das sieht in etwa so aus:
Das funktioniert soweit prima, solange ich normale Lambdas verwende. Nun möchte ich aber eine dicke Ressource in das Lambda hinein moven, also dem Lambda den Ownership übergeben. Innerhalb des Lambdas soll das Objekt dann nochmal in eine Funktion gemoved werden. Etwa so:
Das Lambda muss mutable sein, weil der normale operator() ja eigentlich const wäre und ich die Ressource damit nicht weiterverschieben könnte. Das Problem ist nun, dass ich eine Wand aus Compilerfehlern bekomme, die anscheinend bedeuten, dass std::function irgendwie mein Lambda kopieren will. Und das geht natürlich nicht, weil mein Ressourcen-Objekt nicht kopierbar, sondern nur movable ist.
Zum Ausprobieren gibt hier Beispielcode: https://godbolt.org/z/xxDBIW
Die Frage an die Experten in der Runde lautet: was ist die idiomatische Lösung, um teure Ressourcen mit Ownership an einen Threadworker zu übergeben? Danke im Voraus!
ich habe mal wieder ein C++-Problem. Ich habe ein Job-System, dem ich beliebige Callables zur Ausführung in diversen Threads übergeben kann. Das sieht in etwa so aus:
Code: Alles auswählen
void Dings::MachParallel( std::function<void()>&& func);
Code: Alles auswählen
auto lambda = [zeugs = std::move(dieRessource)]() mutable { MachWasDamit( std::move( zeugs)); };
dings.MachParallel( std::move( lambda));
Zum Ausprobieren gibt hier Beispielcode: https://godbolt.org/z/xxDBIW
Die Frage an die Experten in der Runde lautet: was ist die idiomatische Lösung, um teure Ressourcen mit Ownership an einen Threadworker zu übergeben? Danke im Voraus!