私はC++でファンクターをいじっています。特に、ペアの最初の要素でソートしたいペアのベクトルがあります。私は完全に特殊化されたファンクター (つまり、"bool MyLessThan(MyPair &lhs, MyPair &rhs)" のようなもの) を書き始めました。次に、この種のものが興味深いという理由だけで、一般的な「このペアの最初の要素に F を適用する」ファンクターを書いてみたかったのです。以下に書いたのですが、g++ が苦手です。私は得る:
エラー: 'template struct Pair1stFunc2' のテンプレート パラメーター リストの引数 2 で型/値が一致しません エラー: 型が必要ですが、'less' が得られました
#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 を改善するためだけに、何が起こっているのか知りたいです。