Irgendwie muss ich faule Bewertung mit C++ variadic Lambda implementieren. Ich bin mir nicht ganz sicher, ob der folgende Code richtig funktioniert.Perfect Forward variadic Argumente zu Lambda
Die Frage ist, wie kann ich eine gegebene Argumentliste erfassen und sie perfekt an ein anderes Vorlagenobjekt weiterleiten? Das obige Beispiel kompiliert, aber ich mache mir Sorgen darüber, ob eine unpassende Referenz passieren könnte. Eine andere Möglichkeit ist Argumente durch Kopie zu erfassen und sie und übergeben Sie an das Objekt:
template <typename... ArgsT>
auto lazy_pack(ArgsT&& ... args) {
auto T = [=](bool condition) {
if(condition == false) return;
Foo v(args...);
v.do_work();
};
return T;
}
Ich sehe nicht, wie Sie vermeiden können, Kopien zu machen, da das Lambda tatsächlich aufgerufen wird, und die Argumentwerte viel später, lange nachdem 'lazy_pack' zurückkehrt und seine ursprünglichen Argumente potentiell zerstört werden. –