将 lambda 表达式视为可调用对象的“语法糖”,可以表达未命名的底层类型吗?
一个例子:
struct gt {
bool operator() (int l, int r) {
return l > r;
}
} ;
现在, [](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;
原文由 Yehoshafat Hashiloni 发布,翻译遵循 CC BY-SA 4.0 许可协议
不,您不能将其放入
decltype
因为您可以执行以下操作
但这真的很丑。请注意,每个 lambda 表达式都会创建一个新的唯一类型。如果之后您在其他地方执行以下操作,则
t
的类型不同于s
您可以在此处使用
std::function
,但请注意,这会产生一点运行时成本,因为它需要间接调用 lambda 函数对象调用运算符。它在这里可能可以忽略不计,但如果您想以这种方式将函数对象传递给std::sort
可能会很重要。与往常一样,首先是代码,然后是配置文件:)