先来分析,这个代码的整个执行的流程.
#include <iostream>
#include "./source/Stream.h"
int arr[] = {1,2,3,4,5,6};
using namespace stream;
using namespace stream::op;
int main (int argc, char *argv[]) {
int arr_len = sizeof(arr) / sizeof(arr[0]);
MakeStream::from(arr,arr_len) | filter([](int n) { return n % 2 ==0 ;})
| print_to(std::cout," -> ");
// int number = stream | filter([](int n){ return n % 2 == 0;}) || count();
return 0;
}
MakeStream::from(arr,arr_len)其实是调用了Stream.h的MakeStream类里的一个函数.这个函数又调用了
Stream类的生成函数
template<typename Iterator>
Stream(Iterator begin, Iterator end)
: source_(make_stream_provider<provider::Iterator, T, Iterator>(
begin, end)) {}
可以发现source_就是 一个StreamProviderPtr<T>类型的对象.
StreamProviderPtr<T> source_;
StreamProviderPtr又是由make_stream_provider生成的.
其中:
provider::Iterator是一个Iterator类型的对象.T是一个int类型的对象.Iterator是一个int*类型的对象.
provider::Iterator定义在source/providers/Iterator.h
namespace stream {
namespace provider {
template<typename T, typename Itr>
class Iterator : public StreamProvider<T> {
所以我们选要阅读source/providers里的代码,按下面的顺序阅读
根据map.html里的关系图,StreamProvider.h是一个很基础的类,很多其它的类都需要它
source/providers/StreamProvider.h