表 2.13. 符号
F |
符合查找器概念的类型 |
Fmt |
符合格式化器概念的类型 |
Iter |
迭代器类型 (Iterator Type) |
f |
类型为 F 的对象 |
fmt |
类型为 Fmt 的对象 |
i,j |
类型为 Iter 的对象 |
查找器是一个仿函数,用于搜索容器中的任意部分。搜索结果是一个 iterator_range
,表示选定的部分。
各种算法需要在一个容器中执行搜索,而查找器是这类搜索操作的泛化,它允许算法从搜索中抽象出来。例如,通用的替换算法可以替换输入的任意部分,而查找器用于选择所需的部分。
请注意,只要求查找器能够处理特定的迭代器类型。但是,查找器操作可以定义为模板,从而允许查找器处理任何迭代器。
示例
operator()
是模板化的,因此查找器可以用于任何迭代器类型。struct simple_finder { template<typename ForwardIteratorT> boost::iterator_range<ForwardIteratorT> operator()( ForwardIteratorT Begin, ForwardIteratorT End ) { return boost::make_range( Begin, End ); } };
boost::iterator_range<std::string> simple_finder( std::string::const_iterator Begin, std::string::const_iterator End ) { return boost::make_range( Begin, End ); }
格式化器由 替换算法 使用。它们与查找器紧密结合使用。格式化器是一个仿函数,它接收查找器操作的结果并以特定方式对其进行转换。格式化器的操作可以使用由特定查找器提供的附加信息,例如 regex_formatter()
使用来自 regex_finder()
的匹配信息来格式化格式化器操作的结果。
与查找器类似,格式化器泛化了格式化操作。当使用查找器选择输入的一部分时,格式化器会接收该选择并对其执行一些格式化。算法可以使用格式化器来抽象格式化。
示例
operator()
是模板化的,因此格式化器可以用于任何查找器类型。struct simple_formatter { template<typename FindResultT> std::string operator()( const FindResultT& Match ) { std::string Temp( Match.begin(), Match.end() ); return Temp; } };
std::string simple_formatter( boost::iterator_range<std::string::const_iterator>& Match ) { std::string Temp( Match.begin(), Match.end() ); return Temp; }