2014-01-09 86 views
0

我正在嘗試使用reference_wrappers的矢量做一些工作,並遇到一些問題。這是我得到的:訪問std :: vector中的元素<std :: reference_wrapper <Type>>

std::vector<std::reference_wrapper<Type>> vec; 
//Some stuff... 
for(int i = 0; i < vec.size(); i++) 
{ 
     if(&vec[i] == &vec) 
    { 
     return true; 
    } 
} 

這是行不通的。我對std :: reference_wrapper完全陌生,所以我想我不確定如何使用它。上面這個例子給了我一個'缺少演員'的錯誤。

我有另一個地方,我做這樣的事情:

vec[i].someMethod();

其中產量:

__gnu_cxx::__alloc_traits<std::allocator<std::reference_wrapper<Type> > >::value_type’ has no member named 'someMethod()' 

我使用GCC4.8

+0

循環試圖完成什麼? – 0x499602D2

+1

這應該是'vec [i] .get()。someMethod();'因爲沒有向T&'的隱式轉換。 – 0x499602D2

+0

我知道@VladfromMoscow在這裏和其他地方一樣友好。 – jready

回答

3

一些簡單的例子

int i = 10; 
std::vector<std::reference_wrapper<int>> v; 

v.push_back(std::ref(i)); 

std::cout << v[0] << std::endl; 
std::cout << v[0].get() << std::endl; 

在你的情況下,結構看起來像

vec[i].get().someMethod(); 

P.S.我沒有看過你的更新後的帖子。

+0

這是做到了。沒有意識到.get()方法來檢索數據。 – jready

+0

我想追加該語句std :: cout << v [0] << std :: endl;在這個例子中是有效的,因爲std :: reference_wrapper有一個轉換運算符運算符T&()const noexcept; –

相關問題