Boost C++ Libraries Home Libraries People FAQ More

PrevUpHomeNext

Concepts(概念)

Definitions(定義)
Finder Concept(Finder 概念)
Formatter concept(Formatter 概念)

Definitions(定義)

Table17.13. Notation(符號)

F 可作為 Finder 的模型的類型
Fmt 可作為 Formatter 的模型的類型
Iter 迭代器類型
f 類型 F 的對象
fmt 類型 Fmt 的對象
i,j 類型 Iter 的對象

Finder 概念

Finder 是一個搜索某個容器的任意部分的仿函數。搜索的結果以一個限定所選擇的部分的 iterator_range 的形式給出。

Table17.14. Valid Expressions(合法表達式)

表達式 返回類型 效果
f(i,j) 可轉換為 iterator_range<Iter> 在區間 [i,j) 上執行搜索並返回搜索的結果

許多算法都需要在一個容器上執行搜索操作,而一個 Finder 就是這種搜索操作的一個泛化,它允許算法從搜索中抽像出來。例如,通用的替換算法可以替換輸入的任何部分,而 Finder 就用來選擇需要的那部分。

注意,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 );
        }
    };
            
  • 函數 Finder。Finder 可以成為任何函數對象。也就是說,和任何帶有必要的識別標識的普通函數一樣可以使用。然而,這樣一個函數只能用於一種特定的迭代器類型。
    boost::iterator_range<std::string> simple_finder(
        std::string::const_iterator Begin,
        std::string::const_iterator End )
    {
        return boost::make_range( Begin, End );
    }
            

Formatter 概念

Formatters 用於 replace algorithms(替換算法)。它們通常和 Finder 緊密結合在一起。一個 Formatter 是一個仿函數,它持有一個來自 Finder 的結果並按照指定的方式對它執行轉換。Formatter 的運作可以使用由一個指定的 Finder 提供的額外信息,比如 regex_formatter() 使用來自 regex_finder() 的匹配信息來格式化 Formatter 操作的結果。

Table17.15. Valid Expressions(合法表達式)

表達式 返回類型 效果
fmt(f(i,j)) 一個容器類型,可使用容器特有的方式訪問 格式化 Finder 操作的結果

和 Finders 類似,Formatters 泛化了格式化操作。一個 Finder 用於選擇輸入的一個部分,Formatter 持有這個被選擇的部分並對它執行某些格式化操作。使用一個 Formatter 可以將算法從格式化中抽像出來。

示例

  • 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;
        }
    };
                    
  • 函數 Formatter。和 Finder 類似,Formatter 可以成為任何函數對象。然而,作為一個函數,它只能用於一種特定的 Finder 類型。
    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


PrevUpHomeNext