簡體   English   中英

lambda表達式被拒絕(C ++ 11)

[英]lambda expression being rejected (C++11)

virtual Answer<const Taaal& const> askWho(bool(const Taaal& const)) = 0;
virtual Answer<const Taaal& const> askWho(const Taaal& const t) {
    return askWho([&](auto q) {
        return q == t;
    });
}

被拒絕為“沒有重載函數的實例與參數列表匹配”(此外,我被告知不允許使用auto,但是用顯式類型替換它會導致第一個問題)

Taaal是在其中聲明這些方法的(抽象)類。答案是從另一個標頭中包含的,並且它的定義無關緊要。

僅無捕獲的lambda定義對函數指針的隱式轉換。 由於捕獲默認為& ,因此您的lambda表達式將捕獲其上下文。 由於您的lambda不能是無狀態的,因此您可以更改另一個重載的參數類型

virtual Answer<const Taaal&> askWho(std::function<bool(const Taaal&)>) = 0;

如果您的lambda不需要捕獲上下文變量,則可以從捕獲列表中刪除& ,轉換將按預期進行

virtual Answer<const Taaal&> askWho(const Taaal& t) {
    return askWho([](auto q) {
//                ^^ - nothing here
        return ...;
    });
}

請注意,僅當您在C ++ 14模式下編譯代碼時才使用lambda的auto q參數類型(在gcc和clang上為-std=c++1y )。 在C ++ 11模式下,您將指定參數類型。

Lambdas中的auto僅在C ++ 14中允許。

您必須使用實數參數類型,C ++ 11中不包含多態lambda。

暫無
暫無

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

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