std :: bindはこれらの演算子をオーバーロードしていないようですか?何故ですか?
C ++ 11はラムダを追加したため、匿名ファンクターオブジェクトを生成するのに同じ便利さを提供します。
std ::bindで_1==desired_valueをシミュレートするための良い回避策は何ですか?
std :: bindは、動作のシミュレーションには使用されません。C ++ 11ラムダを使用して、質問への回答を実装します。
std::vector<int>::iterator it = std::find_if (myvector.begin(), myvector.end(), [](int i) -> bool { return i == desired_value; });
戻り型を導出できるかなり最近のコンパイラを使用している場合は、「->bool」構文は必要ないことに注意してください。
C ++ 11ラムダを使用したくない、または使用できない場合は、次のような非匿名ファンクターを作成できます。
bool IsDesiredValue (int i) {
return (i == desired_value);
}
std::vector<int>::iterator i = std::find_if (myvector.begin(), myvector.end(), IsDesiredValue);
別の例として、C ++ 11ラムダを使用して匿名ファンクターを作成し、タイプの値でベクトルを並べ替えます。
std::sort(myVector.begin(), myVector.end(), [](const Foo& i, const Foo& j) -> bool { return i.myValue < j.myValue; });
代替の非ラムダバージョンは次のようになります。
struct myclass {
bool operator() (const Foo& i, const Foo& j) { return (i.myValue < j.myValue); }
} myobject;
std::sort(myVector.begin(), myVector.end(), myobject);
そして、ブーストの演算子オーバーロードを使用して同じソートを行う方法は次のとおりです。
std::sort(myVector.begin(), myVector.end(), boost::bind(&MyClass::myValue, _1) < boost::bind(&MyClass::myValue, _2))