![]() |
Home | Libraries | People | FAQ | More |
Table17.13. Notation(符號)
F |
可作為 Finder 的模型的類型 |
Fmt |
可作為 Formatter 的模型的類型 |
Iter |
迭代器類型 |
f |
類型 F 的對象 |
fmt |
類型 Fmt 的對象 |
i,j |
類型 Iter 的對象 |
Finder 是一個搜索某個容器的任意部分的仿函數。搜索的結果以一個限定所選擇的部分的 iterator_range 的形式給出。
Table17.14. Valid Expressions(合法表達式)
| 表達式 | 返回類型 | 效果 |
|---|---|---|
f(i,j) |
可轉換為 iterator_range<Iter>
|
在區間 [i,j) 上執行搜索並返回搜索的結果 |
許多算法都需要在一個容器上執行搜索操作,而一個 Finder 就是這種搜索操作的一個泛化,它允許算法從搜索中抽像出來。例如,通用的替換算法可以替換輸入的任何部分,而 Finder 就用來選擇需要的那部分。
注意,Finder 和一種特定的迭代器類型一起工作是僅有的必要條件。然而,一個 Finder 操作可以定義成一個模板,這樣就允許 Finder 可以和任何迭代器一個工作。
示例
operator()是模板化的,所以這個 Finder 能夠用於任何迭代器類型
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 );
}
Formatters 用於 replace algorithms(替換算法)。它們通常和 Finder 緊密結合在一起。一個 Formatter 是一個仿函數,它持有一個來自 Finder 的結果並按照指定的方式對它執行轉換。Formatter 的運作可以使用由一個指定的 Finder 提供的額外信息,比如 regex_formatter() 使用來自 regex_finder() 的匹配信息來格式化 Formatter 操作的結果。
和 Finders 類似,Formatters 泛化了格式化操作。一個 Finder 用於選擇輸入的一個部分,Formatter 持有這個被選擇的部分並對它執行某些格式化操作。使用一個 Formatter 可以將算法從格式化中抽像出來。
示例
operator() 是模板化的,所以這個 Formatter 能夠用於任何 Finder 類型。
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;
}
Last revised: June 19, 2008 at 08:07:24 -0400 |