向量的通用排序

时间:2012-11-15 08:53:21

标签: c++ templates sorting stdvector

我想创建一个通用排序函子,我可以使用它来对我的向量进行排序。根据我的研究,我提出了以下代码。 但是当我实现排序时,我得到了下面所述的错误。请提出如何做的建议。我需要一个通用排序,因为我有一些不同的用户定义对象,我需要使用不同的标准排序。

我的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'没有对象

0 个答案:

没有答案