これが標準であるか、私のコードのバグかどうか疑問に思っていました。私は自家製の関数オブジェクトのペアを比較しようとしています。関数オブジェクトの型が同じでない場合、私は比較を拒否したので、2つのラムダが同じ型であることを知っています。だから彼らはなぜ比較できないのですか?ラムダを比較することはできません
2
A
答えて
3
シグネチャが同じでも、すべてのC++ 0x lambdaオブジェクトには異なるタイプがあります。
auto l1=[](){}; // one do-nothing lambda
auto l2=[](){}; // and another
l1=l2; // ERROR: l1 and l2 have distinct types
2つのC++ 0x lambdaの型が同じである場合、それらは同じコード行から来ている必要があります。もちろん、変数を取り込む場合、異なる呼び出しから来た可能性があるため、必ずしも同一である必要はありません。
しかし、C++ 0x lambdaには比較演算子がないため、インスタンスを比較してそれらが実際に同じか、まったく同じかどうかを確認することはできません。キャプチャされた変数に比較演算子がない場合、各コピーにはキャプチャされた変数の値が異なる可能性があるため、その型のラムダを比較することはできません。
0
"自家栽培"と言うとき、operator()でクラスを明示的に宣言したことを意味しますか?または、新しいラムダ構文を使用しましたか? – templatetypedef
@templatetypedef:それは、自分自身のバージョンのstd :: functionであり、継承と型の消去によって実装されています。 – Puppy
あなたは正確に何を比較しようとしていますか? – sellibitze