![](/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.