美文网首页
异世相遇 Generic Lambda in C++20

异世相遇 Generic Lambda in C++20

作者: ospacer | 来源:发表于2021-09-19 15:57 被阅读0次

偶遇

今日昨日在网上冲浪时偶然遇到lambda表达式的一种新语法,定睛一看,恰好能优雅地解决前段时间的纠结,遂记录之。

太长不看版直接前往今生并不能跳转的链接

前世

自C++11引入lambda表达式以来,lambda表达式就被引入了C++(逃

在此之后的C++14对其进行了第一次增幅,不仅捕获能力更强,泛化能力也不可同日而语,因此改头换面被称呼为generic lambda。以下是一种用法:


auto func = [](auto a, auto b) { return a + b; };

以上等价于


template <typename T1, typename T2>

auto func(T1 a, T2 b)

{

return a + b;

}

即使强如generic lambda in C++14也没有做到通常模板函数的泛化能力。以下形式即无法由lambda等价表示:


// case 1

template <typename T>

auto func(T a, T b) { ... }

// case 2

template <typename T, std::size_t N>

auto func(std::array<T, N> const& arr) { ... }

而以上case 2正是我所希望以lambda写成的等价形式。

今生

当今lambda表达式进一步支持模板参数,大概可以称为generic templated lambda吧(?)


auto lambda = []<typename T>(T a) { ... };

  • 坏消息是:上述特性需要C++20支持,大多数生产环境未来可期

  • 好消息是:当前手到擒来的VS2019以及ubuntu 20.04中的gcc 9.3均可开启此特性

对于上面提到的两个case可以分别写做:


auto func = []<typename T>(T a, T b) { ... };  // case 1

auto func = []<typename T, std::size_t N>(std::array<T, N> const& arr) { ... };  // case 2

Refs

  1. What is the need of template lambda introduced in C++20 when C++14 already has generic lambda?

  2. Lambdas: From C++11 to C++20, Part 2

本文仅讨论lambda表达式的泛化能力,关于[]的捕获能力不在本文范围

相关文章

  • 异世相遇 Generic Lambda in C++20

    偶遇 今日昨日在网上冲浪时偶然遇到lambda表达式的一种新语法,定睛一看,恰好能优雅地解决前段时间的纠结,遂记录...

  • C++20:标准库

    原文详见:C++20: The Library 在上篇文章 C++20:核心语言 中我们介绍了 C++20 的核心...

  • 异世

    深冬几度,容华谢后,风华流沙,苍老年华,繁华乱世,静水流深,沧笙踏歌,三生圆缺…… 翰墨流离那一世,激扬疆场火狼烟...

  • 异世

    清晨,傲世学院! “靠!这一定是在做梦!睡一觉醒来竟然长胖了!骨头都变成肉了?”不和谐的声音是从 一个胖乎乎的七八...

  • 异世

    你们的世界,我的世界,我们散了。

  • 异世

    幕布一样的黑夜,一道亮光滑过天空,似乎想要将整个夜幕照亮。 “快,快进行掩盖。”云景道长回头对自己的小童吩咐道。 ...

  • 异世

    异世界 是个好玩的地方 那里没有亲情 灵魂是个兔子 或者猫 我住着 鬼混的酒店 喝了一碗酒 身边的兄弟吃着一个耳朵...

  • 异世

    沿着挂在云端的天路 飞越一根根通天的石柱 从尽头异世之门进入 广阔而美丽的大陆 来到危机四起的国度 面对突然出现强...

  • 第四章 异世相遇

    不足一刻钟各种各样的饭菜就上桌了,这雪梅办事速度挺快的哈。 梦亦然看着桌上这些,水晶丸子,东波肉,清蒸鲫鱼…… 拿...

  • C++20:并发

    原文详见:C++20: Concurrency 本篇是 C++20 概览系列的最后一篇。今天我将介绍 C++ 新标...

网友评论

      本文标题:异世相遇 Generic Lambda in C++20

      本文链接:https://www.haomeiwen.com/subject/lrfpgltx.html