は、私は(私のツールチェーンのC++ 11のサポートが不完全であるため)私は、ラムダを使用することはできません共有ポインタのソートリスト
list<shared_ptr<objects>> myObjects;
をソートしたいクラスに
class objects {
public:
bool compareArea (const objects& obj) const { return this->area < obj.area; }
private:
double area;
};
を考えます。したがって、私は次のように試しました:
using namespace placeholders;
myObjects.sort(bind(&objects::compareArea,_1,_2));
この行は、クラスメンバーからではなく、別のファイルから呼び出されます。問題は、compareArea
が入力として2つのobjects
を必要とすることです。しかし、私はそれにobjects
への2つの共有ポインタを与える。ポインターの逆参照を含む方法の簡単な方法はsort
-callにありますか?私はobjects::compareArea(..)
機能をそのまま残したいと思います。私はないは解決
compareArea
が
objects
のないメンバー関数ではありません
bool compareArea (const shared_ptr<objects>& ptr1, const shared_ptr<objects>& ptr2) {
return ptr1->area > ptr2->area;
}
// in same source-file:
myObjects.sort(bind(compareArea,_1,_2));
のこの種をしたいです。実際には<
の演算子オーバーロードが私の好きな解決策になります。あなたは非常に簡単に(あなたがキャプチャを必要としない場合は特に)に直接ものを書くことができるように
?それはあなたが必要とする種類の表現をサポートすることもできます。 – Angew
'bool lessObject(const shared_ptr&lhs、const shared_ptr &rhs)についてはどうでしょうか?return lhs-> compareArea(* rhs); } '? –
Jarod42
@Angew私はあなたの質問を得ていません...私はstd :: bindを使用しています。プレースホルダは上記のコードスニペットに書かれているように '_1'と '_2'です。 – Kapa11