Ich muss Argumente (Parameter Pack) speichern und die Argumente an eine andere Funktion übergeben.
Als Ergebnis kann ich Lambda nicht verwenden. Und eine gute Wahl ist std :: bind.
Aber für diesen CodeC++ - std :: binden Aufrufoperator() mit perfekter Weiterleitung
struct A{};
void test(A &&){}
int main()
{
A a;
test(move(a)); //work
bind(test,a)(); //compile fail; copy a to std::bind, pass a to test
}
Laut Norm, alle in std :: bind gespeicherten Variablen als L-Wert übergeben werden, funktionieren. (Der C++ - Standard sagt das nicht, indem ich denke, dass es das ist.)
Und das bedeutet, dass ich eine Funktion (hat Rvalue-Verweis in Parameter) mit Std :: Bind nicht verwenden kann.
Eine Lösung ist test(A &&)
zu test(A &)
zu ändern, aber das funktioniert nur für Ihr Projekt (und es seltsam, während Sie nicht nur Test von std :: Thread aufrufen müssen, sondern auch Test durch Klar sequentielle Aufruf aufrufen müssen).
Gibt es also Möglichkeiten, dieses Problem zu lösen?
* "Ich kann Lambda nicht benutzen" *, können Sie das näher erläutern? und wo ist das Parameterpaket, das du erwähnst? –
@NathanOliver Sie vergaßen, 'foo' zu nennen –
@PiotrSkotnicki Guter Punkt. Ich habe das gemacht und es scheitert spektakulär. – NathanOliver