# EventVisitorList Concept

EventVisitorList は、EventVisitor そのものか、 `std::pair` で結合された EventVisitor のリストである。各グラフアルゴリズムには、 EventVisitorList を、アルゴリズムに必要な独自のビジタに変換するアダプタが定義されている。 以下に、イベントビジタを `std::pair` で結合してリストにする方法の例と、アルゴリズムのビジタアダプタクラスの使い方の例を示す。

仮に、深さ優先探索で、各頂点の発見/呼び出しの前後関係を、括弧を使った構造で出力したいとする。これを達成するには、 BGL アルゴリズム `depth_first_search()` と 2 つのイベントビジタを使えばよい。以下の例の完全なソースコードは `examples/dfs_parenthesis.cpp` に有る。まず、 2 つのイベントビジタを定義する。使うイベントビジタとして、 DFSVisitor に詳述されたイベントのリストの中から `on_discover_vertex` と `on_finish_vertex` を選ぶ。

    struct open_paren : public base_visitor<open_paren> {
      typedef on_discover_vertex event_filter;
      template <class Vertex, class Graph>
      void operator()(Vertex v, Graph& G) {
        std::cout << "(" << v;
      }
    };
    struct close_paren : public base_visitor<close_paren> {
      typedef on_finish_vertex event_filter;
      template <class Vertex, class Graph>
      void operator()(Vertex v, Graph& G) {
        std::cout << v << ")";
      }
    };

次に 2 つのイベントビジタオブジェクトを作り、 `std::make_pair` で作られる `std::pair` を使って、この 2 つから EventVisitorList を作る。

    std::make_pair(open_paren(), close_paren())

次にこのリストを `depth_first_search()` に渡したい所だが、 `depth_first_search()` が求めているのは DFSVisitor であって、 EventVisitorList ではない。そこで EventVisitor のリストを DFSVisitor に変換するアダプタ、 `dfs_visitor` を使う。他のビジタアダプタ同様、 `dfs_visitor` には `make_dfs_visitor()` という作成関数が有る。

    make_dfs_visitor(std::make_pair(open_paren(), close_paren()))

さあこれで、以下のように、生成されたビジタオブジェクトを `depth_first_search()` に渡す事ができる。

      // グラフオブジェクト G を作る...

      std::vector<default_color_type> color(num_vertices(G));

      depth_first_search(G, make_dfs_visitor(std::make_pair(open_paren(), close_paren())),
                         color.begin());

3 つ以上のイベントビジタのリストを作りたければ、以下のように `std::make_pair` をネストして呼び出せばいい。

    std::make_pair(visitor1,
      std::make_pair(visitor2,
        ...
        std::make_pair(visitorN-1, visitorN)...));

### See Also

EventVisitor, Visitor concepts

Copyright © 2000-2001 | Jeremy Siek, Indiana University (jsiek@osl.iu.edu) Lie-Quan Lee, Indiana University (llee@cs.indiana.edu) Andrew Lumsdaine, Indiana University (lums@osl.iu.edu)

Japanese Translation Copyright © 2003 Hiroshi Ichikawa
オリジナルの、及びこの著作権表示が全ての複製の中に現れる限り、この文書の複製、利用、変更、販売そして配布を認める。このドキュメントは「あるがまま」に提供されており、いかなる明示的、暗黙的保証も行わない。また、いかなる目的に対しても、その利用が適していることを関知しない。

このドキュメントの対象: Boost Version 1.30.0
最新版ドキュメント (英語)