![](/img/trans.png)
[英]Why can't I use a functor as the comparator function in btAlignedObjectArray:quicksort?
[英]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.