首页 > 代码库 > C++ 流畅接口

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 }

 

C++ 流畅接口