ich eine Methode, wie dieses:Polymorphismus nicht in C++ arbeiten Lambda-Funktion
void syncOperation(ProgressCallback& progressCallback);
wo ProgressCallback
ist:
class ProgressCallback
{
public:
virtual void onProgress(std::size_t currValue, std::size_t maxValue) {}
virtual void onDone() {}
};
und ich möchte es machen async, so dass ich die folgende :
void asyncOperation(ProgressCallback& progressCallback)
{
auto impl = [this](ProgressCallback& progressCallback_)
{
syncOperation(progressCallback_);
};
jobsPool.addJob(std::bind(impl, progressCallback));
}
aber das Verhalten von progressCallback
im zweiten Fall (asyncOperation(ProgressCallback&)
) isn‘ t polymorph, ruft es immer Methoden der Basisklasse auf und das ist definitiv nicht das, was ich erwarte. Also meine Fragen sind: 1) warum passiert es und 2) wie man es repariert (ja, ich weiß, ich kann einfach aufhören, Lambdas in meinem Fall zu verwenden, aber vielleicht gibt es einen traditionellen Workaround)?
Warum jonglierst du lambdas und 'std :: bind' anstatt einfach' [&] {syncOperation (progressCallback); } '? – Quentin
@drolmal diese Frage ist wild nicht verwandt –
Nir, die Post erklärt im Detail a) warum gibt es nicht Poly Lambdas und b) wie man es beheben ... – didiz