2011-12-20 13 views
0
//this returns a boost::ptr_vector<Ordre>  
auto& vec = ptf.listeOrdre().liste(); 

auto it = std::find_if(vec.begin(), vec.end(), 
     [message](Ordre& ordre){return ordre.id() == message->id();} 
); 

if(it == vec.end()) 
{ 
    return; 
} 

Ordre& ordre = *it; 

私は「&」に関する疑問を持っているか、「*」私はラムダパラメータとコードの最後の行に使用する必要があります。参照またはポインタ表記:: ptr_vector

誰かが間違っていますか?

おかげ

+0

ラムダにメッセージを渡すべきではありませんか? – mark

+0

ptr_vectorが参照の代わりにポインタを返した場合は、まったくコンパイルされません。 - おそらく 'liste()'はローカル変数への参照を返しますか? – visitor

+0

@mark:わからない。なぜあなたは私が参照によってメッセージを渡すべきだと思いますか? – Guillaume07

答えて

1

最後の行を、私は生産にクラッシュを持っていると私はこのコードを疑うが正しく見えます。

考えられるエラーの1つはptf.listeOrdre()です。値を返すと、コピーされます。 vecは一時オブジェクトへの参照を持ちます。

ラムダのパラメータはconst&である必要がありますが、それは問題ではないかと思います。

これ以外に、このコードスニペットには何も問題はありません。

+0

'ptf.listeOrdre()'が値を返した場合、非constの左辺参照を一時的にバインドするのは不正ですので、 'auto&vec = ptf.listeOrdre()。liste();'はコンパイルに失敗します。 – ildjarn

+0

@ildjarn。あなたは混乱しています。 'liste()'が値を返した場合、コンパイラはそれに不満を持ちます。しかし、非const関数を一時的に呼び出すことは許されています。 'listOrdre()'が値を返すとどうなりますか?ここをクリックしてください:[ideone.com/gpUNA](http://ideone.com/gpUNA) –

+0

あなたは正しいです、私は誤解しました。私が言っていたことは、 'ptf.listeOrdre()。liste()'が値によって返された場合、 'auto&vec = ptf.listeOrdre()。liste();'はコンパイルに失敗します。もちろん、あなたは 'ptf.listeOrdre()。liste()'ではなく、 'ptf.listeOrdre()'について話していました。ノイズは申し訳ありません。 : - ] – ildjarn