[英]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.