繁体   English   中英

为什么我不能使用 lambda 作为类中定义的集合的比较器?

[英]Why can't I use a lambda as a comparator for a set defined in a class?

这是相当标准的并且工作正常:

#include <set>

auto cmp = [](int a, int b) { return a > b; };
using stype = std::set<int, decltype(cmp)>;

stype mySet(cmp);

但是为什么我不能这样做呢?

#include <set>

auto cmp = [](int a, int b) { return a > b; };
using stype = std::set<int, decltype(cmp)>;

struct foo {
    stype mySet(cmp);
};

这因Unknown type name 'cmp'失败(在 XCode 5.1.1 中,使用 llvm 为 Mac 编译,以防相关。)

此错误的原因是什么,我该如何修复/解决它? 我是否必须避免为此目的使用 lambda,如果是,为什么?

我的实际代码有几个类存储stype::iterator类型的对象以指向foo::mySet内的项目,所以我想在结构外声明stype

非静态数据成员初始值设定项必须是大括号或相等初始值设定项 以下应该工作:

stype mySet {cmp};
stype mySet = stype(cmp);

但是, stype mySet(cmp); 被解析为声明名为mySet的成员函数,该成员函数返回stype并采用类型为cmp的未命名参数,因此出现错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM