私は次のように定義してここにenqueue
機能を有している:私は、Matrix
クラス内に存在する第一の両方を通過する必要が'&&'署名が含まれている場合、C++でFucntionと引数を渡す方法は?
template<class F, class... Args>
auto ThreadPool::enqueue(F&& f, Args&&... args)
2機能:
Matrix tester_gar(Matrix &m)
{
printf("It came here");
return m;
}
秒:
void tester_garbage()
{
printf("It came here for no argument");
}
ここでは、Matrixは構造体です。この問題ではその定義は必要ありません(必要に応じて投稿できます).I havいくつかの方法でenqueue
関数を呼び出すために以下のようないくつかのメソッドを試しましたが、それらはすべて失敗します。
Matrix a;
pool.enqueue(std::bind(&Matrix::tester_gar,&a),a);
OR
Matrix a;
pool.enqueue(std::bind(&Matrix::tester_garbage,&a));
通常は、どちらかの機能は
a.tester_garbage()
または
a.tester_gar(a)
として使用する必要があります。このシナリオではどのように使用しますか?
通常、xをrvalue-reference(&&)に変換するにはstd :: move(x)を呼び出す必要があります。 – Valentin
@Valentin:rvalue参照は含まれていません。 'enqueue()'へのパラメータは、推測されます、すなわち、それらは_forwarding references_です。 –
@DietmarKühlあなたはもちろん正しいです。私はこの構文が嫌いです:) – Valentin