我想尽可能避免代码重复。假设我有一个类(class),例如

class T {
    int val;
    bool operator < (const T& right) const { return val < right.val; }
}

我希望能够这样调用std::sort(),
std::sort( SomeContainer.begin(), SomeContainer.end(), FuncAdaptedFromOp );

这是我在StackOverflow中的第一个问题。请原谅。

编辑

问题在于该类可能具有多个bool T::Compare (const T& right)函数。我仍然想要一个适配器。举个例子
class Edge {
    Vertex u, v;
    bool CompareSrc (const Edge& right) const { return u < right.u; }
    bool CompareDest (const Edge& right) const { return v < right.v; }
}

有时我想按源Vertex排序,有时要按目标Vertex排序。我只想知道这是否可行。

最佳答案

using namespace std::placeholders;
std::sort(SomeContainer.begin(), SomeContainer.end()
    // or use &Edge::CompareDest if you want that instead
    , std::bind(&Edge::CompareSrc, _1, _2) );
std::bind是C++ 11,因此,如果您的实现中有使用boost::bind(在这种情况下,您不应使用前面的using指令)或TR1中的bind。否则,我建议您使用自己的函子。

关于c++ - 是否可以将诸如bool T::operator <(const T&right)之类的成员函数转换为binary_function?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10052565/

10-12 00:36