C++ 流畅接口

流畅接口(Fluent Interface),第一次见是在看 RapidJSON 的 wiki 时看见的。

意为返回自己的引用,这样可以不间断地调用一个函数多次。

1 template<typename T>
2 class Array{
3     ...
4     Array &push_back(const T& value){
5         ...
6         return *this;
7     }
8 };

这样插入操作的时候,就可以

1 Array<int> arr;
2 arr.push_back(1).push_back(2);

这只是简单的用法。

之前看到过一个问题,如何在 C++ 中实现这种函数调用效果:

1 if ( add(3)(4)(10) == 17 )
2     return true;

我的方法是用 operator() 重载 + 隐式类型转换:

 1 class Add{
 2 public:
 3     Add():sum(0){}
 4     Add &operator() (int value){
 5         sum += value;
 6         return *this;
 7     }
 8     operator int(){
 9         return sum;
10     }
11 private:
12     int sum;
13 };
14
15 int
16 main(void){
17     if (add(3)(4)(10) == 7)
18         cout << "True" << endl;
19     else
20         cout << "False" << endl;
21     return 0;
22 }
时间: 2024-10-06 01:51:42

C++ 流畅接口的相关文章

流畅接口【其他模式】

流畅接口 @Slf4j @SuppressWarnings("boxing") public class FlentInterface { /** * Fluent Interface pattern[流畅接口]:能够提供易读.流畅的编程模式 */ @Test public void all() { Stream.of(1, 2, 3) .filter(x -> x >= 2) .limit(1) .findAny() .ifPresent(val -> log.in

Hypertext Application Language(HAL)

Hypertext Application Language(HAL) HAL,全称为Hypertext Application Language,它是一种简单的数据格式,它能以一种简单.统一的形式,在API中引入超链接特性,使得API的可发现性(discoverable)更强,并具有自描述的特点.使用了HAL的API会更容易地被第三方开源库所调用,并且使用起来也很方便,开发者可以像处理普通JSON数据那样去处理API数据.有关HAL的更多信息,可以参考官方网站:http://stateless

Apworks框架实战(六):使用基于Entity Framework的仓储基础结构

在前面的章节中,我们已经设计了一个简单的领域模型,接下来我们希望能够实现领域模型的持久化及查询.在Apworks中,实现了面向Entity Framework.NHibernate以及MongoDB的仓储基础结构.在本章节中,我将向大家介绍如何在Apworks中使用基于Entity Framework的仓储机制. 搭建基于Entity Framework的基础结构 在使用Apworks提供的仓储服务之前,我们首先需要搭建好基于Entity Framework的基础结构,以便接下来的Apworks

C# GetHashCode 的实现方式

在项目中,在使用哈希表时.有时会须要Override GetHashCode. 这里给出一种普遍的做法: 版本号1:实现一个helper.传递类型T.返回这个类型的hashcode.函数逻辑非常直接,仅仅是做了null check而已.假设obj不为空,则直接使用obj的hash code. public class HashHelper { private int _seed = 17; public int Hash<T>(T obj) { // why 31? // https://co

在ASP.NET Core中使用Apworks快速开发数据服务

不少关注我博客的朋友都知道我在2009年左右开发过一个名为Apworks的企业级应用程序开发框架,旨在为分布式企业系统软件开发提供面向领域驱动(DDD)的框架级别的解决方案,并对多种系统架构风格提供支持.这个框架的开发和维护我坚持了很久,一直到2015年,我都一直在不停地重构这个项目.目前这个项目在Github上也得到了将近260的推荐数,很多对技术感兴趣的朋友也一直与我保持着联系和交流,甚至还有爱好者自发组成了技术讨论群,专门讨论分享Apworks框架. 然而,随着软件开发技术和.NET的发展

NHibernate 中文第一个入门指南

该文为转载内容 https://shop149484391.taobao.com/shop/view_shop.htm?spm=a1z09.1.a1zvx.d53.yoyrDX&mytmenu=mdianpu&user_number_id=1041857928 NHibernate 入门指南 标签: databasesession数据库测试domainclass 2009-12-18 19:22 3699人阅读 评论(3) 收藏 举报 分类: DotNet(5) Welcome to NH

一些.NET 项目中常用的类库

Web自动化测试   Watin Selenium  Selenium git .net 集合类扩展实现C5 Subscriber/Publisher 模式 Rx Nats 防御式编程 断言库 流畅接口实现 CuttingEdge Conditions 序列化JSON.Net Protobuf.Net 元编程IL Wave类库 Cecilpostsharp 单元测试Xunit Moq AAA模式 一个方便创建Dummy 对象的类库 文件操作 Excel 操作CSV操作Pdf操作 OAuth oA

Atitit. 提升软件开发效率and 开发质量---java 实现dsl 4gl 的本质and 精髓 O725

Atitit. 提升软件开发效率and 开发质量---java 实现dsl 4gl 的本质and 精髓  O725 1. DSL主要分为三类:外部DSL.内部DSL,以及语言工作台. 1 2. DSL规则 2 2.1. DSL = 整洁的代码 2 2.2. DSL必须以文本代码的形式出现 2 2.3. DSL的语法应该尽可能地接近英语或者其他自然语言 2 3. DSL 文本形式 or 图形标识 2 4. 实现方式 2 4.1. 2. 管道抽象 2 4.2. 3. 层次结构抽象 3 4.3. 4.

在ASP.NET Core中使用Apworks开发数据服务:对HAL的支持

HAL,全称为Hypertext Application Language,它是一种简单的数据格式,它能以一种简单.统一的形式,在API中引入超链接特性,使得API的可发现性(discoverable)更强,并具有自描述的特点.使用了HAL的API会更容易地被第三方开源库所调用,并且使用起来也很方便,开发者可以像处理普通JSON数据那样去处理API数据.有关HAL的更多信息,可以参考官方网站:http://stateless.co/hal_specification.html.目前,很多REST