這個問題在這里已經有了答案: 當 C 14 已經有了泛型 lambda 時,C 20 中引入的模板 lambda 有什么需要? (4 個回答) 4 天前關閉。
我們在 C 20 之前就有了泛型 lambda,可以寫出這樣的東西。
auto l = [](auto a, auto b)
{
return a b;
};
然后 C 20 引入了模板 lambdas,我們可以在其中撰寫這樣的東西
auto l = []<typename T>(T a, T b)
{
return a b;
};
或這個
auto l = []<typename T>(T a, auto b)
{
return a b;
};
有人可以解釋一下有什么區別嗎?
更具體地說,什么模板 lambdas 可以實作,這是 C 20 之前的泛型 lambdas 無法實作的?
uj5u.com熱心網友回復:
auto l = [](auto a, auto b)
可以使用兩個完全不同的引數呼叫此 lambda。a可以是int,也b可以是std::string。
auto l = []<typename T>(T a, T b)
必須使用兩個具有相同型別的引數呼叫此 lambda。T,就像在常規模板中一樣,只能是單個特定型別。
這是主要的區別。在 C 20 之前,您可能可以使用 a 實作大致相同的功能static_assert,但這簡化了它。
uj5u.com熱心網友回復:
我認為有用的一個用例是立即呼叫
[]<std::size_t... Is>(std::index_sequence<Is...>)
{
// ...
}(std::make_index_sequence<N>());
預模板 lambda,您必須創建輔助函式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/380309.html
