将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) 我正在尝试在C++ 11中实现一个带有lambda函数的映射
std::map<int, int, [](const int&a, const int& b) { return a < b; }> test;
Run Code Online (Sandbox Code Playgroud)
但那失败了
错误:模板参数列表中参数3的类型/值不匹配
‘template<class _Key, class _Tp, class _Compare, class _Alloc> class std::map’错误:期望一个类型,得到
‘{}’错误:
‘;’令牌之前的声明中的无效类型
有什么建议?
我按照这个答案来定义一个带有lambda函数的priority_queue.但是,我正在运行:error:lambda-expression在未评估的上下文中
#include <bits/stdc++.h>
int main()
{
std::priority_queue<
int,
std::vector<int>,
decltype( [](int a, int b)->bool{
return a>b;
})>
q;
}
Run Code Online (Sandbox Code Playgroud)