我有以下功能:lambda函數作爲參數傳遞
template <typename Range>
Range FindFirstIf(Range rng, bool (*Function)(typename Range::ConstReference value))
爲了這個功能,我想傳遞一個lambda函數是這樣的:
rng = FindFirstIf(rng, [](const float& val) { return (v < 0.0f); });
凡rng
是名單的範圍浮動,所以Range::ConstReference
被定義爲const float&
我的編譯器(gcc)抱怨類型不匹配
C:\Programming\Collections\main.cpp|24|note: mismatched types 'bool (*)(typename Range::ConstReference)' and 'main(int, char**)::< lambda(const float&) >'|
有人可以告訴我我的代碼有什麼問題嗎?
編輯:
當我通過功能這樣的,它的工作原理:
bool (*func)(const float& v) = [](const float& v) { return v < 0.0f; };
當我嘗試使用auto關鍵字,這是同樣的問題之前:
auto func = [](const float& v) { return v < 0.0f; };
你應該檢查'val',而不是'v'。 – hvd 2014-09-06 18:20:10
你已經有了一個解釋什麼是錯的答案,但是也可能有用的是一個解決方法:'rng = FindFirstIf(rng,+ [](const float&v){return(v <0.0f);});'。 '+'強制直接將lambda轉換爲函數指針(因爲lambda類沒有提供重載的「+」運算符,但提供了轉換爲指針的運算符,其結果是「+」可以是應用),並且GCC 4.8不會將其檢測爲不匹配類型。 – hvd 2014-09-07 02:32:24
@hwd謝謝你真的很好的解決方法 – 2014-09-08 11:22:53