c++23中的新功能之四generator

204 篇文章 27 订阅

一、协程应用回顾

协程在前面反复的分析说明过,协程是个好东西,可以大幅的降低多线程编程的门槛。所以c++标准也是看上这一点,希望能以此将c++的应用推广,毕竟容易一些也就更容易吸引开发人员。当然容易也意味着语言本身的安全性和健壮性有了进一步的保障。
c++20中的一大特性就是协程,但是在c++20中的支持并不好,只是解决有和无的问题,没有完全实现协程的推广应用问题,别急c++23开始补齐这个短板,在c++23中提出了std::generator,它是协程的同步生成器,有了它,协程的应用就会进一步简化。

二、c++23中的实现

看一下std::generator的定义:

std::generator
 C++ Utilities library Coroutine support Ranges library std::generator
Defined in header <generator>
template<
    class Ref,
    class V = void,
    class Allocator = void
> class generator : public ranges::view_interface<generator<Ref, V, Allocator>>   (1)	(since C++23)
namespace pmr {
template< class Ref, class V = void >
using generator =
    std::generator<Ref, V, std::pmr::polymorphic_allocator<>>;                    (2)	(since C++23)
}

从这个定义可以看出,它有两个目的,一个是通过yielded来生成Ranges视图,第二个是可以使用多态生成器来生成别名模板。目前来看,这个生成器在实际应用中返回的是一个右值引用,同时它可以在引用包装器的情况下实现递归的调用,这个就比较好用了。
不过目前这个生成器目前对平台的兼容性还遇到一些小问题,在不同的平台,可能性能不一样,这个一定要注意。std::generator是只能是move-only,不过它可以通过引用传递给函数。同样需要友情提示的此处的Ranges是支持右值的,这也是对c++20的一个bugfix。

三、应用

下面来看一个简单的例子:

#include <generator>
#include <ranges>
#include <iostream>

std::generator<char> letters(char first)
{
    for (;; co_yield first++);
}

int main()
{
    for (const char ch : letters('a') | std::views::take(26))
        std::cout << ch << ' ';
    std::cout << '\n';
}

其运行结果:

a b c d e f g h i j k l m n o p q r s t u v w x y z

这么看代码,越看越像Haskell之类的动态语言。

四、总结

std::lazy在c++23可能是看不到了,协程的支持还是步履艰难的在前进,有进展就是好事,一步一个脚印,罗马终会到达。希望c++标准的不断发展迭代能让更多的开发者能喜欢c++,这样,才能更好的把这门语言推广开来。新语言的出现不光是竞争者,更是促进者。良性的竞争反而会促进整个开发语言环境的整体成长。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: c/c++项目生成器是一种工具,可以自动生成c/c++项目的基本框架,包括文件结构、编译选项、依赖库等。它可以帮助程序员快速创建一个的项目,节省时间和精力。常见的c/c++项目生成器有CMake、Autotools、QMake等。 ### 回答2: C/C++项目生成器是一个用于生成C/C++代码和项目的工具,它能够帮助程序员自动生成基本的项目框架和代码文件,简化开发过程,提高开发效率。C/C++项目生成器被广泛应用于软件开发,它可以自动创建和配置项目文件、源代码文件、头文件、Makefile文件、编译器参数等,并且可以支持多种编译器和开发环境。 C/C++项目生成器的使用非常简单,开发者只需按照提示输入一些基本信息,如:项目名称、项目路径、编译器类型、库文件等,然后点击“生成”按钮,项目就可以立即生成。生成后的项目结构清晰、规范,并且符合行业标准。开发者可以在生成的基础上继续开发,节省了很多时间和精力。 除了生成基本的项目框架和代码文件,C/C++项目生成器还可以根据用户需求生成特定的代码,如Socket通信、GUI开发、数据库等。用户只需选择相应的选项,即可生成相应的代码文件。 总的来说,C/C++项目生成器是一个非常有用的工具,它能够帮助开发者快速构建项目,减少重复的工作量,提高开发效率,是现代软件开发必不可少的工具之一。 ### 回答3: C/C++项目生成器是一种用于创建和管理C/C++项目的工具。它通常通过几个步骤来生成项目骨架,包括选择编译器、构建工具、库等。C/C++项目生成器可以减少项目配置的时间和复杂性,帮助开发人员更快地开始编写代码和测试应用程序。 C/C++项目生成器通常支持不同的操作系统和编译器,可以帮助开发人员生成多平台的应用程序。生成器还可以生成不同类型的项目,如控制台应用程序、GUI应用程序、库等。生成器可能还包括其他特性,如代码生成器、自动化测试、静态分析等。 使用C/C++项目生成器可以提高开发效率,减少错误,增强代码质量。它可以自动配置项目并生成必要的文件和代码,减少手动操作和打字的时间。它还可以确保项目的一致性,避免一些常见的错误和误用。 总之,C/C++项目生成器是一种强大的工具,可以帮助开发人员更快、更方便地开始编码和测试C/C++应用程序。通过使用它,开发人员可以更好地专注于应用程序的核心功能,从而更好地增强整个项目的质量和稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值