簡體   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