Changes between Initial Version and Version 1 of HowTo/BoostStudy4


Ignore:
Timestamp:
Feb 26, 2011, 10:31:38 AM (14 years ago)
Author:
村山 俊之
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • HowTo/BoostStudy4

    v1 v1  
     1[[PageOutline]]
     2= Boost.勉強会 !#4 ノート =
     3
     4== Boost Fusion Library ==
     5
     6=== タプルとは ===
     7
     8 * Boost Tuple Library
     9 * std::pair の N個版
     10
     11=== ヘテロなコンテナとは ===
     12
     13あらゆる型を格納できるコンテナ。 std::vector<boost::any>
     14タプルもヘテロの一種
     15
     16=== Boost.Fusion ===
     17
     18タプルをヘテロとみなして STL チックな種々のアルゴリズムを適用するライブラリ。
     19
     20=== Fusion シーケンス ===
     21
     22 * vector, list, deque が使える
     23 * イテレータもいける
     24 * for_each の実装例 ... 要素毎に型が異なるので再起関数として実装する
     25
     26=== アルゴリズム ===
     27
     28 * View を用いた遅延評価が特徴。
     29
     30=== 使いどころ ===
     31
     32 * 名前がついているがシーケンスとしても扱いたい場合 (RGB など)
     33   * 構造体として扱うと名前を付けられるがシーケンスとして扱えない
     34   * 配列だと名前が…
     35 * DSEL の内部実装 (Boost.Spirit.Qj/Karma)
     36   * 異なる型のシーケンスを扱う機会が多い。Regexp やパーサコンビネータ。
     37{{{
     38fusion::vector<int, char, double> result;
     39parse("1 a 3.14", int_ >> char_ >> double_, result);
     40}}}
     41 * Fusion Sequence をコンセプトとするライブラリへの一括アダプト (Boost.Geometry)
     42   * Fusion シーケンスとしてアダプトされたすべての型を、 Geometry の coordinate として扱うことが出来る。
     43
     44=== ライブラリの設計 ===
     45
     46 * タプルは値 (メンバ変数) と値の集合 (クラス) に、名前のない複合データ型。
     47 * Boost.Fusion では、ユーザー定義型を Fusion シーケンスにアダプトすることで、名前有りタプルとみなすことが出来るようになる。
     48 * ユーザーコード: 名前有り世界 / ライブラリコード: 名無し世界 として棲み分けするとよさげ…。
     49   * タプルはクラスを作るのが面倒くさいときに即興で使われることが多い。... メンテナンス性が低下する
     50   * データを単なるシーケンスとして扱って良いのはライブラリの中だけ。
     51 * ユーザーコードではユーザー定義型を fusion シーケンスへアダプトすることで有用なアルゴリズムが使えるようになる。
     52
     53=== まとめ ===
     54
     55 * タプルをリストとみなす
     56 * タプルに名前をもたらす
     57 * ライブラリの設計に取り入れればユーザーコードが柔軟に