哈喽,各位好!今天咱们来聊聊 C++17 引入的 std::any,这玩意儿可是个挺有意思的家伙,它玩的是“类型擦除”这门玄学。听起来高大上,但其实没那么可怕。咱们慢慢扒,保证你听完能用它在代码里耍两下。 啥是std::any? 简单来说,std::any 就像一个能装任何东西的魔法盒子。你可以往里面塞整数、字符串、自定义类对象,只要是能复制构造的东西,它都能装。但装进去之后,你就不知道里面具体是啥了,除非你把它取出来的时候告诉它。 类型擦除:障眼法大师 std::any 的核心技术就是类型擦除。类型擦除的目的,就是让你在使用的时候不用关心具体类型,但是底层还是得知道类型信息,不然没法正确地操作数据。这就像魔术师变魔术,你只看到结果,不知道他怎么变的。 类型擦除怎么实现的? 类型擦除的常见做法是使用虚函数表 (vtable) 和指针。咱们来看看 std::any 的内部结构(简化版): #include <iostream> #include <typeinfo> #include <memory> class any_base { public: …
`Promise.any`:第一个成功的 Promise 结果
好的,各位观众老爷们,欢迎来到今天的“Promise奇妙夜”!今晚,我们要聊的这位主角,它就像Promise界的“及时雨”,专治各种“等不及”,它就是——Promise.any! 开场白:Promise家族的“快枪手” 话说在Promise王国里,住着一群性格各异的Promise公民。有的慢条斯理,像老教授一样,慢慢悠悠地resolve;有的急性子,一遇到reject就立刻“爆炸”,搞得大家鸡飞狗跳。而我们今天要介绍的Promise.any,它就像一位身手敏捷的“快枪手”,只要任何一个Promise率先成功,它就会毫不犹豫地返回成功的结果,简直是效率至上! 第一幕:Promise.any的“身世之谜” Promise.any,顾名思义,就是“任何一个”的意思。它接受一个Promise数组作为参数,并返回一个新的Promise。这个新的Promise会“监听”数组中的每一个Promise,一旦其中任何一个Promise成功resolve,Promise.any就会立刻resolve,并将成功的结果返回。 语法结构: Promise.any(iterable); iterable: 一个可 …