2013-03-17 8 views
8

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

エラーにAccoring
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 ! 

、直接の割り当ては削除されます。

error: use of deleted function 'std::reference_wrapper<_Tp>::reference_wrapper(_Tp&&) [with _Tp = int]'

答えて

11

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

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

Herestd::reference_wrapperのすべてのメンバ関数の一覧です。そこoperator=ですので:失敗した参照ラッパーに変換されるリテラル

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

int型、およびあなたが表示されるエラーメッセージです。

また、変換演算子を明示的に(static_cast<int&>(v[0]) = 1111;)呼び出すこともできますが、前述のようにget()メソッドを使用する方が効果的です。

+1

変換演算子をこのように使用できない場合はどうすればよいでしょうか? 'static_cast (v [0])= 1111;' get() 'があるときはちょっとダムです。 – chris

+0

'std :: reference_wrapper 'の非明示的なコンストラクタがここで重要であると付け加えることがあります。 'boost :: reference_wrapper'は持っていません。 – inf

+2

@chrisだから 'reference_wrapper 'を関数 'T&'に渡すことができます( 'get()'と呼ぶこともできますが、もっと冗長です)。 –

関連する問題