我想能夠獲得一個函數指針指向一個lambda在C++中。獲取函數指針給lambda?
我可以這樣做:
int (*c)(int) = [](int i) { return i; };
,當然,下面的工作 - 即使它不是建立一個函數指針。
auto a = [](int i) { return i; };
但以下幾點:
auto *b = [](int i) { return i; };
給出了這樣的錯誤在GCC:
main.cpp: In function 'int main()':
main.cpp:13:37: error: unable to deduce 'auto*' from '<lambda closure object>main()::<lambda(int)>{}'
auto *b = [](int i) { return i; };
^
main.cpp:13:37: note: mismatched types 'auto*' and 'main()::<lambda(int)>'
似乎武斷了lambda可轉換爲沒有問題的函數指針,但是編譯器無法推斷函數類型並使用auto *
創建指向它的指針。特別是當它可以隱式轉換unique, lambda type
一個函數指針:
int (*g)(int) = a;
我在http://coliru.stacked-crooked.com/a/2cbd62c8179dc61b包含上面的例子創建一個小的測試牀。在C++ 11和C++ 14下,這種行爲是相同的。
規則'auto'推論都是非常相似的模板扣除。這裏你有扣除和轉換:你只能有一個。 – milleniumbug
我想將問題標題更改爲「爲什麼auto *不會從lambda推導出函數指針類型?」爲了使這成爲一個具體的問題。這似乎是令你困惑的事情。但是你會更喜歡一些更像是「如何從lambda函數獲取函數指針而不寫入類型?」 –
第一個標題聽起來不錯。 – oconnor0