img] const { elem *= Factor; } }; int main( [img]/images/wink.gif[/img] { using namespace std; vector v1; //... // Using for_each to multiply each element by a Factor for_each ( v1.begin ( [img]/images/wink.gif[/img] , v1.end ( [img]/images/wink.gif[/img] , MultValue ( -2 [img]/images/wink.gif[/img] [img]/images/wink.gif[/img]; } 虽然 STL 较为成功的通过迭代器、算法和谓词,将此协同执行逻辑中的行为和控制分离,谓词表现行为(MultValue、迭代器(v1.being(), v1.end())表现控制状态、算法表现控制逻辑(for_each),但仍然存在编写复杂,使用麻烦,并且语义不连冠的问题。 一个缓解的方法是将谓词的定义与控制部分合并到一起,就是类似 boost::Lambda 的实现思路: 以下内容为程序代码: for_each(v.begin(), v.end(), _1 = 1); for_each(vp.begin(), vp.end(), cout << *_1 << ' '); 通过神奇的模板和宏,可以一定程度降低编写独立谓词来页码:[1] [2] [3] [4] [5] [6] [7] [8] 第4页、共8页 |