06|Concepts实战:写个向量计算模板库
模块组织方式
- 深入了解
- 翻译
- 解释
- 总结
本文深入探讨了利用C++20的特性设计和开发向量计算模板库。通过介绍模块组织方式和接口设计,重点讲解了利用Concepts约束设计的模板,展示了如何在C++20及其后续演进标准中应用这些特性。文章通过对核心Concepts的定义和工程代码中合适地使用Concepts的演示,帮助读者快速了解如何利用C++模板技术和Concepts设计和开发一个向量计算模板库。此外,还介绍了视图模块和计算模块的具体实现,展示了模块化设计的优势。整体而言,本文为读者提供了实际操作的示例,帮助他们更好地理解C++20及其后续演进标准,为C++开发者提供了有益的技术参考。文章强调了Concepts的重要性,以及它们在泛型编程中的应用,为读者提供了对现代C++特性的深入理解和应用。
《现代 C++20 实战高手课》,新⼈⾸单¥59
全部留言(5)
- 最新
- 精选
- 黄骏内容太干了。哈哈。 nits:concepts.cpp的line 38应该是IteratorMemberFunction(&T::end)吧?
作者回复: 是的,应该把begin换成end。 已进行修正。 🥰
2023-01-29归属地:湖北1 - 常振华我觉得concepts确实比modules有用多了。。。前者能改变编程思想,后者在我看来只是换汤不换药的语法糖,反而让语法看起来更复杂
作者回复: 就目前来说,编译器对 modules 的支持还非常非常初级,以至于很多标准都没有能实现。但是总的来说,modules 作为诸多现代语言的特性,在C++中也能彻底解决符号隔离问题,而且对产品分发来说也大有益处。 当然,这都需要建立在编译器对 modules 的完善支持的基础上,就目前来说,还不行。需要等待C++23、C++26的推出,以及主流编译器跟进的速度,如clang、gcc和 VC。
2023-09-12归属地:广东 - !null定义 creation 模块时用到的 fillContainerBuffer、makeContainerShape 和 ContainerValueTypeHelper 这些约束表达式,就利用了 concept 的“原子约束”特性选择不同的模版版本,实现了泛型编程中的“多态”特性。 没看懂哪里体现了泛型编程的多态
作者回复: 多态也就是针对不同的输入类型提供统一的接口。 Concepts正给我们提供了这种能力,而且更细粒度地为不同的类型提供不同的实现。
2023-08-15归属地:北京 - Geek_7c0961concepts 这个feature太强了, 让我想起了rust中的traits 和 traits objects.
作者回复: Concepts的确是非常重要的feature,让C++编译时静态化编码整体提升了一个档次。现代C++演进有一种“Rust化”的趋势,当然了,C++还是有着独特的气质,而且对向前兼容性方面几乎是无敌的。
2023-01-31归属地:美国 - Geek_e04349感觉 SliceItem 的 getValidValue 使用 optional 返回会更符合其语义
作者回复: 这里的确是可以使用std::optional。
2023-01-27归属地:云南