diff --git a/listings/listing_9.3.cpp b/listings/listing_9.3.cpp index 47278c2..7a963dc 100644 --- a/listings/listing_9.3.cpp +++ b/listings/listing_9.3.cpp @@ -2,6 +2,14 @@ #include #include +template +struct accumulate_block { + _Tp operator() (_ForwardIt __first, _ForwardIt __last) + { + return std::accumulate(__first, __last, __Tp{}); + } +}; + template T parallel_accumulate(Iterator first,Iterator last,T init) { @@ -21,7 +29,9 @@ T parallel_accumulate(Iterator first,Iterator last,T init) { Iterator block_end=block_start; std::advance(block_end,block_size); - futures[i]=pool.submit(accumulate_block()); + futures[i]=pool.submit([=] { + return accumulate_block()(block_start,block_end); + }); block_start=block_end; } T last_result=accumulate_block()(block_start,last);