
当处理标准模板库(Standard Template Library ,STL)运算规则时,对于给定的容器/范围,开发者可能会发现有必要同时执行多个功能。
例如,你可能想把一个范围(range)同时输出到控制台和一个日志文件中:你可以用类似下面的方法实现这个功能:
上面的代码是没有可重用性的。它同时完成了两件事:打印到控制台并记录到文件。在这以后,你需要同时做这两件事情的情况几乎不会再发生了,不过,很可能会再次碰到做这两件事中的某一件的情况。
你可以像下面的代码那样把上述两个任务分解到各自的类:
那么,日后当你希望同时做多个任务时,可以调用mutli_func函数,如下所示:
在调用mutli_func函数时,你可以使用多达六个仿函式(函数对象,functor)。每个仿函式必须是可修改的、一元变量的函数。换句话说,每个仿函式必须包含下面的typedef:
- argument_type:函数的参数
- result_type:函数的返回值
获得所需的typedef最简单的方法就是继承(直接或者间接)std::unary_function(如log_to_console/log_to_file中仿函式所示)。