簡體   English   中英

lambda 函數可以衰減到指向成員 function 的指針嗎?

[英]Can lambda functions decay to a pointer to member function?

在我的理解中,lambda 的行為應該與函數相似,甚至可以擴展它們的功能。

因此,無捕獲 lambda 可以衰減為 function 指針:

auto x = +[] (int x) {return x + 5;} // + triggers conversion to function pointer.

但是,我還沒有找到使 lambda function 的行為類似於成員 function 的方法。

例如,以下代碼段不起作用:


class MyClass() {
   int x;
   static constexpr auto member_lambda_func = [this] () {return x + 5;}; //Does not compile. Cannot capture this.
};

此外,您甚至無法制作一個 lambda,它將this衰減捕獲為指向成員 function 的指針。

是否有制作 lambda 成員函數的解決方法? 還是有充分的理由不這樣做?

如果 Lambda 沒有捕獲,則它們可以衰減為 function 指針,但如果它們捕獲某些東西,它們就不能衰減為任何東西。 特別是,如果它只捕獲this ,它就不能衰減到成員 function 指針。

請參閱cppreference

lambda 函數可以衰減到指向成員 function 的指針嗎?

簡短的回答:沒有。

Lambda 只能轉換為 function 指針。 並且成員 function 指針不是 function 指針(它們甚至不是指針)。

此外,只有非捕獲 lambda 轉換為 function 指針。 捕獲this的 lambda 是捕獲 lambda。

像這樣的東西可能有用 - 我不知道出於什么目的,但我能想到的最接近您的要求:

static constexpr auto member_lambda_func = [](const MyClass& self) {
    return self.x + 5;
};

暫無
暫無

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

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