我一直在玩 C++ 中的函子。特别是,我有一个对的向量,我想按对的第一个元素进行排序。我开始编写一个完全专业的仿函数(例如“bool MyLessThan(MyPair &lhs, MyPair &rhs)”)。然后,仅仅因为这类东西很有趣,我想尝试编写一个通用的“将 F 应用于这对的第一个元素”函子。我在下面写了,但 g++ 不喜欢它。我得到:
错误:“模板结构 Pair1stFunc2”的模板参数列表中参数 2 的类型/值不匹配错误:预期类型,得到“更少”
#include <algorithm>
#include <functional>
#include <utility>
#include <vector>
template <class P, class F>
struct Pair1stFunc2
{
typename F::result_type operator()(P &lhs, P &rhs) const
{ return F(lhs.first, rhs.first); }
typename F::result_type operator()(const P &lhs, const P &rhs) const
{ return F(lhs.first, rhs.first); }
};
typedef std::pair<int,int> MyPair;
typedef std::vector<MyPair> MyPairList;
MyPairList pairs;
void foo(void)
{
std::sort(pairs.begin(),
pairs.end(),
Pair1stFunc2<MyPair, std::less>());
}
谁能阐明我在这里做错了什么?我知道这是一个稍微人为的例子,但我想知道发生了什么,如果只是为了改进我的 STL-fu。