ベクトルを並べ替えるために使用できる汎用並べ替え関数を作成したいと思います。私の調査によると、次のコードを思いつきました。しかし、並べ替えを実装すると、以下のエラーが発生します。やり方のアドバイスお願いします。異なる基準を使用してソートする必要があるいくつかの異なるユーザー定義オブジェクトがあるため、一般的なソートが必要です。
私の Template.h
template<typename T, typename M, template<typename> class C = std::less>
struct method_comparer : std::binary_function<T, T, bool>
{
explicit method_comparer(M (T::*p)() const) : p_(p) { }
bool operator ()(T const& lhs, T const& rhs) const
{
return C<M>()((lhs.*p_)(), (rhs.*p_)());
}
private:
M (T::*p_)() const;
};
template<typename T, typename M>
method_comparer<T, M> make_method_comparer(M (T::*p)() const)
{
return method_comparer<T, M>(p);
}
template<template<typename> class C, typename T, typename M>
method_comparer<T, M, C> make_method_comparer2(M (T::*p)() const)
{
return method_comparer<T, M, C>(p);
}
main.cpp
std::sort(vec_p2d.begin(),vec_p2d.end(),make_method_comparer(&Point2D::getX())); //ASC
std::sort(vec_p2d.begin(),vec_p2d.end(),make_method_comparer(&Point2D::getX(), std::greater<int>())); //DESC
エラー:
Assn3.cpp:379:115: エラー: オブジェクトなしでメンバー関数 'int Point2D::getX() const' を呼び出すことはできません