簡體   English   中英

在 C++ 類中使用 auto 聲明 lambda 函數

[英]Declaring lambda function with auto in a C++ class

是否可以使用 auto 在 C++ 類中聲明 lambda 函數? 我收到編譯錯誤拋出錯誤:類型為 'const Temp::(lambda at a.cpp:8:29)' 的靜態數據成員的類內初始化器需要 'constexpr' 說明符 在這里,我為作為類成員變量的集合定義了一個自定義排序函數,我想在類中定義這個排序函數。 我怎樣才能解決這個問題?

其次,即使我將 lambda 函數行移到類之外,我也會在我聲明集合的行處收到錯誤:未知類型名稱“cmp” 為什么以及如何修復它?

class Temp {
public:
    static const auto cmp = [](int p1, int p2)
        {
            return p1>p2;
        };
    set<int, decltype(cmp) > sortedSet(cmp);
    Temp() {
    }
}
  • 按照編譯器的建議使用constexpr
  • std::set<int, decltype(cmp)> sortedSet(cmp)被解析為函數
    • int sortedSet(int);
#include <set>
class Temp {
public:
    static constexpr auto cmp = [](int p1, int p2)  // <-- use constexpr
        {
            return p1>p2;
        };
    std::set<int, decltype(cmp) > sortedSet{cmp}; // <-- use uniform initialization
    Temp() {
    }
};

或者你也可以用普通功能來做

#include <set>
class Temp {
public:
    static bool cmp(int p1, int p2) {
        return p1>p2;
    };
    std::set<int, decltype(&cmp) > sortedSet{cmp};
    Temp() {
    }
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM