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