我想在 std::map 构造的时候直接使用 Lambda 表达式指定排序方式, 但是编译器报错了
class Person {
public:
std::string name;
int age;
Person(const std::string & n , int a) {
name = n;
age = a;
}
class Compare {
public:
bool operator()(const Person & lhs, const Person & rhs) {
return lhs.age < rhs.age;
}
};
};
auto lambda = [](const Person & lhs, const Person & rhs){
return lhs.age < rhs.age;
};
auto wapper = [lambda]() {
return lambda;
};
bool a = Person::Compare()(Person("p1", 1), Person("p2", 2));
bool b = wapper()(Person("p1", 1), Person("p2", 2));
// Success
std::set<Person, Person::Compare> sp;
// E: Template argument for template type parameter must be a type
std::set<Person, wapper> sp;