2014-01-09 85 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; –

相关问题