我對於理解這一點很困難。我知道我的編譯器(Visual Studio)知道lambda是什麼「類型」,因爲它有時會顯示它是lambda,但是我的模板不會推導出它,auto關鍵字也不會。模板功能或自動關鍵字不能推導出Lamba類型
template <typename T> void templatedFunc(T (*funcPtr)(void)) { }
int main()
{
templatedFunc([]() { return 6;}); // Error, no template matches argument list
int (*funcPtr)(void) = []() { return 6;};
templatedFunc(funcPtr); // Works fine
auto p = []() { return 6; };
templatedFunc(p); // Error, no template matches
auto p = []() -> int { return 6; }; // Trying with explicit return type
templatedFunc(p) // Error, still doesn't work
}
我真的不明白,任何幫助都會很大。當我將鼠標懸停在變量「p」上時,它將其類型顯示爲int()。我可以使這項工作的唯一方法是通過顯式聲明的指針,如:
int (*ptr) (void) = []() { return 6;};
我一直得到的錯誤是:
No instance of function template matches the argument list. Argument types are lambda []int() -> int
感謝。
這是爲什麼汽車不能推斷類型的原因是什麼? – Zebrafish
@TitoneMaurice:我不明白。 'auto'推導出一個類型。它可能不是你想要的類型。 –
「auto p =」後的類型是一個lambda,我的編譯器告訴我這是一個lambda,我期望p是一個指向lambda的函數指針,因爲它們被轉換爲函數指針。 – Zebrafish