引数(パラメータパック)を格納し、引数を別の関数に渡す必要があります。
その結果、私はラムダを使用できません。そして良い選択はstd :: bindです。
しかし、このコードの完全な転送を伴うstd :: bind call operator()
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
}
STDに保存されている標準、すべての変数による::バインドが機能するために左辺値として渡されます。 (C++標準では、そのことを意味するとは思わない)
これは、std :: bindで関数(rvalue参照をパラメータに持つ)を使用できないことを意味します。
test(A &&)
をtest(A &)
に変更する方法がありますが、これはプロジェクトでのみ有効です(std :: threadでテストを呼び出す必要があるだけでなく、通常の順次呼び出しでテストを呼び出す必要があります)。
この問題を解決する方法はありますか?
*「ラムダは使用できません」*、それについて詳しく説明できますか?あなたが言及しているパラメータパックはどこですか? –
@NathanOliverあなたは 'foo'を呼び出すのを忘れました –
@PiotrSkotnicki良い点。私はそれをし、それは驚くほど失敗する。 – NathanOliver