12

でラップされたアイテムにどのように値を割り当てることができstd::reference_wrapperますか?

int a[] = {0, 1, 2, 3, 4};

std::vector <std::reference_wrapper<int>> v(a, a+5);

v[0] = 1234;  // Error, can not assign value !

エラーによると、直接代入は削除されます:

エラー: 削除された関数 'std::reference_wrapper<_Tp>::reference_wrapper(_Tp&&) [with _Tp = int]' の使用

4

1 に答える 1

14

get()メンバー関数を使用します。

v[0].get() = 1111; // ok

のすべてのメンバー関数のリストを次に示しstd::reference_wrapperます。があるのでoperator=

reference_wrapper& operator=( const reference_wrapper<T>& other );

int リテラルは参照ラッパーに変換されますが、これは失敗し、表示されるエラー メッセージです。

または、変換演算子を明示的に ( ) 呼び出すこともできますが、上記の方法をstatic_cast<int&>(v[0]) = 1111;使用することをお勧めします。get()

于 2013-03-17T17:21:54.980 に答える