我想尽可能避免代码重复。假设我有一个类(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/