2013-03-17 21 views
8

std::reference_wrapper tarafından sarılmış bir öğeye nasıl bir değer atayabiliriz? Hata göre işletmelerinBir std :: reference_wrapper değerine atama

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 ! 

, direkt atama silinir:

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

cevap

11

get() üye işlevini kullanın:

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

Herestd::reference_wrapper tüm üye fonksiyonları bir listesidir. Orada bir operator= olduğundan: başarısız bir referans sarmalayıcı, dönüştürülür değişmez

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

int ve gördüğünüz hata mesajıdır. Alternatif olarak, dönüşüm işlecini (static_cast<int&>(v[0]) = 1111;) açık olarak arayabilir, ancak yukarıda gösterildiği gibi get() yöntemini daha iyi kullanabilirsiniz.

+1

Sadece merak ediyorsanız, bu şekilde kullanılamazsa dönüşüm operatörünün kullanımı nedir? Ben get() 'orada olduğunda static_cast (v [0]) = 1111; – chris

+0

Belki "std :: reference_wrapper" ın açık olmayan yapıcısının burada önemli olduğunu ekleyelim. 'boost :: reference_wrapper' değil. – inf

+2

@chris, bir 'reference_wrapper 'işlevini,' T &' ('get()' da oraya çağırabilirsiniz diye bir işleve geçirebilirsiniz, sanırım, ama sadece daha ayrıntılı olacaktır). –

İlgili konular