这是昨天群里的一个问题,但我想谈的是背后的本质问题。 这个问题其实可以简化为: template <typename …Args> void foo(std::function<bool(Args…)>) { } int main() { // error: no matching function for call to 'foo(main()::<lambda(int)>)' foo([](int) { return true; }); } 本质原因在 TAD(模板参数推导),这里实参 A = closure type,形参 P = std::function<bool(Args…)>。由于类型完全不同,P 无法替换成 A,这里 TAD 完全不可能推断出 Args… 的类型。于是,模板函数因模板替换失败,而被早早移除,连一级筛选 Candidate functions 都未能进入。 不用 std::function 可能更易理解。一个例子: template <class… Continue Reading T240104 Failed to Passing a Lambda Expression to std::function

不知大家是否遇到过这样的代码: template <class… Args> void f(Args……) {} 参数包后面紧跟着 6 个 .,一般不是用 … 来扩展参数包吗?这是什么鬼东西? 这个其实可以称为 Two ellipsis operators(非正式称谓),虽说极其罕见,但却是 C++11 标准的一部分,见 [dcl.fct]/3: parameter-declaration-clause:  parameter-declaration-listopt …opt  parameter-declaration-list , … 也就是说,它其实是 …, … 的省略写法。以下这三种写法完全等价: template <class… Args> void f(Args……) {} template <class… Args> void f(Args… …) {} template <class… Args> void f(Args…, …) {}… Continue Reading T240102 What does the …… mean in C++?

凄凄微霜,靡靡年尽。 今岁是本号的第六年,朔其建立,不过蓦然起意,随性而记,阅者寥寥,未想习惯悄成,数载似梦,写作依旧。尔今随性依旧,暇日兴起,便构思编例,查经观典,细复完善,更得三两文章。 我写文颇自矜重,每有想法,必要深挖见底,思虑再三,始提笔撰文。是以文章结构完整,主题分明,单则是文,合则成书。读书更文,亦不以数量而论,而以知识点为单位。故桌上之书,时几本俱开,添得三两文献,对照观之,每有所得,意兴弥逸。但有选题,辄觅多点联系,力求尽美尽善。遂数年既过,不过百篇而已。 杨柳垂垂,清风袅袅。我与墨梵、邹启翔、水滴会飞、404 汇 The Book of Modern C++,将平日所读文章,按题选类,裒然成秩,俾优文广传,幽隐可显。 烈日炎炎,芭蕉冉冉。二三春社群方开,距二一冬已一年有余,人数激增,技术奇巧,靡不讨论。既而汇书发布,得一时暇光,续作分享,间以更文。行云悄逝,月落参横,寻常淡日,指间捻过。 秋阳杲杲,秋草摇摇。我与数友出门游玩,云白气清,山颦翠色,土湿青苔,暖风透爽。沿途游者众多,云䯿亭亭,翠袖笼香,粉吹旖旎,玉立娉婷。悠长大道,空旷绿树,骑驰其间,琐事尽置脑后。残阳隐隐,灯影昏昏,累登山巅,斜倚云屏,观烟琐归鸦,感物换星移。如此江山,人在蓬壶,图画中间。星影渐稀,残灯不明,便踏月而归,落叶响空林,谈笑声更盛,叹碧宇澄空,一日荡悠悠。 玉霙霏霏,霜风淒凄。我为尘事相羁,更文见少。时有呼声欲入社群,于是短短半年,二三冬开放。此次一开,主群殆满,下次知是何年?墨梵译书新出,多有见贻,我以近年多看电子书,且早已读过婉拒,遂在群内抽奖赠送,俾物尽其用矣。 云萍聚散,春秋奄冉而过。编程既久,少年之心不减,依旧弥日不倦,只是此身茫茫,不能屡为所好而作。 CppMore 网站今年建立,以往文章,陆续迁移,以编辑称意,修改方便,管理轻松。所有迁移与所撰新文,按照分类及时间,皆自动汇总于 https://www.cppmore.com/articles/。 年杪,文尾,我又呼朋引伴,寻地跨年。花灯照夜,兰舟载月,熙熙语笑,遥迎甲辰。踪迹沉浮又一载,多少韶光,几许消沉,今夕随风去。 今岁今宵尽,莺语哗声中,微闻歌者曰: 空空兮寂城,灿灿兮寒星。 春秋兮不止,日月兮弗停。 追求兮数载,半世兮浮萍。 倦倚兮西风,孤灯兮暗影。 有悲兮有兴,无雨兮无晴。 遥途兮漫长,浩荡兮驰行。 语尽,夜已深,炮声不绝,自语云,愿新年,胜旧年。