将lambda表达式视为可调用对象的"语法糖",可以表达未命名的基础类型吗?
一个例子:
struct gt {
bool operator() (int l, int r) {
return l > r;
}
} ;
Run Code Online (Sandbox Code Playgroud)
现在,[](int l, int r) { return l > r; }是上述代码的优雅替代(加上gt的可调用对象的必要创建),但有没有办法表达gt(类型)本身?
一个简单的用法:
std::set<int, gt> s1; // A reversed-order std::set
// Is there a way to do the same using a lambda?
std::set<int, some-magic-here-maybe([](int l, int r) { return l > r; }) > s2;
Run Code Online (Sandbox Code Playgroud) 我有以下错误的代码,我试图在VC2010中编译,但我得到错误C2974这只发生在我包含lambda表达式时,所以我猜它与此有关.
typedef pair<pair<int, int>, int> adjlist_edge;
priority_queue< adjlist_edge , vector<adjlist_edge>,
[](adjlist_edge a, adjlist_edge b) -> bool {
if(a.second > b.second){ return true; } else { return false; }
}> adjlist_pq;
Run Code Online (Sandbox Code Playgroud)
我知道模板定义的形式是正确的
priority_queue<int , vector<int>, greater<int>> pq;
Run Code Online (Sandbox Code Playgroud)
按预期工作.我有什么想法我做错了吗?看起来不对的lambda有什么明显的错误我可能会忽略吗?谢谢阅读!