45
C++ を加速させる Boost hotwatermorning

Study3 boost

Embed Size (px)

Citation preview

Page 1: Study3 boost

C++ を加速させる Boosthotwatermorning

Page 2: Study3 boost

本日のレシピ

Boost とは? Boost で C++ はどうなる? 今日から使えるライブラリの紹介 その他、今日役立つ Boost の紹介 まとめ

Page 3: Study3 boost

Boost とは?

Page 4: Study3 boost

Boost とは? 正式名称 「 Boost C++ Libraries 」 C++ 標準化委員会のメンバが始めたオープ

ンソースプロジェクト C++ の次期標準ライブラリのための実験場

としてスタート〜プログラミングの魔導少女” Boost C++ Libraries より〜

Page 5: Study3 boost

Boost とは? 正式名称 「 Boost C++ Libraries 」 C++ 標準化委員会のメンバが始めたオープ

ンソースプロジェクト C++ の次期標準ライブラリのための実験場

としてスタート〜プログラミングの魔導少女” Boost C++ Libraries より〜

ライブラリのためのライブラリみたいなものが多い。

Page 6: Study3 boost

Boost とは? 正規表現・テキスト処理など コンテナ 関数オブジェクトや高階関数 テンプレートメタプログラミングや Generi

c プログラミング 数学(行列、乱数、数学関数など) Input/Ouput その他色々。

Page 7: Study3 boost

Boost とは? 正規表現・テキスト処理など コンテナ 関数オブジェクトや高階関数 テンプレートメタプログラミングや Generi

c プログラミング 数学(行列、乱数、数学関数など) Input/Ouput その他色々。 非常に幅広い。非常に幅広い。

Page 8: Study3 boost

Boost とは? それぞれのライブラリは Boost に提案して

から、厳正なレビューを経て、認められたものだけが Boost 入りを果たす。

(レビューの対象になる項目はアキラ先生の記事参照のこと。ソースだけじゃなくて、テストコードやドキュメントも。)

なので、 Boost に入っているライブラリは非常に質が高い。

Page 9: Study3 boost

Boost とは? 公式サイト http://www.boost.org/

日本語情報 https://sites.google.com/site/boostjp/ “Boostjp” http://www.kmonos.net/alang/boost/ “Lets' Boost”

Page 10: Study3 boost

Boost で C++ はどうなる?

Page 11: Study3 boost

Boost で C++ はどうなる? 旧来の C++

Page 12: Study3 boost

Boost で C++ はどうなる? 旧来の C++ 生ポインタ 生配列 貧弱な文字列処理 STL は不完全 C++ の魔力が足りてない状態

Page 13: Study3 boost

Boost で C++ はどうなる? 旧来の C++ → 加速した C++ 生ポインタ    → SharedPtr,... 生配列      → Array 貧弱な文字列処理 → StringAlgo, Regex,... STL は不完全 → Lambda, Range,... C++ が魔力付与された状態

Page 14: Study3 boost

Boost で C++ はどうなる? デメリットも・・・

Page 15: Study3 boost

Boost で C++ はどうなる? デメリットも・・・

コンパイル時間が伸びる!コンパイル時間が伸びる!

Page 16: Study3 boost

Boost で C++ はどうなる? デメリットも・・・

コンパイル時間が伸びる!コンパイル時間が伸びる!

どれくらい伸びるかは、ライブラリによりけりです。ほとんど影響がないものもあります。

Boost.Spiritおすすめ!

Page 17: Study3 boost

今日から使えるライブラリの紹介

Page 18: Study3 boost

今日から使えるライブラリの紹介(※主観)

Page 19: Study3 boost

今日から使えるライブラリの紹介

Boost.ForEach

Page 20: Study3 boost

今日から使えるライブラリの紹介

Boost.ForEach

std::vector<int> vs;BOOST_FOREACH(const v, vs) { std::cout << v << std::endl;}

BOOST_REVERSE_FOREACH(const v, vs) { std::cout << v << std::endl;}

Page 21: Study3 boost

今日から使えるライブラリの紹介

Boost.ForEach コンテナを走査 コンテナだけじゃなく配列もおk。 取得する要素を const 変数に出来る break や continue にも対応

Page 22: Study3 boost

今日から使えるライブラリの紹介

Boost.SmartPtr

Page 23: Study3 boost

今日から使えるライブラリの紹介

Boost.SmartPtr スマートポインタ

← モダンな C++ の代表格

Page 24: Study3 boost

今日から使えるライブラリの紹介

Boost.SmartPtr スマートポインタ

← モダンな C++ の代表格

shared_ptr scoped_ptr intrusive_ptr (unique_ptr)

Page 25: Study3 boost

今日から使えるライブラリの紹介

Boost.SmartPtr

{ SomeClass *p = new SomeClass(); try { foo(p); delete p; p = 0; } catch(...) { delete p; p = 0; }}

Page 26: Study3 boost

今日から使えるライブラリの紹介

Boost.SmartPtr

{ boost::shared_ptr<SomeClass> p( new SomeClass());

foo(p.get());}

Page 27: Study3 boost

今日から使えるライブラリの紹介

Boost.Thread

Page 28: Study3 boost

今日から使えるライブラリの紹介

Boost.Thread Windows のスレッドや PThread をラップ C++ から使いやすいインタフェースに 同期機構には Boost.Mutex を使う ※ ビルドが必要

Page 29: Study3 boost

今日から使えるライブラリの紹介

Boost.Thread

//void worker(int n) { /* ... */ }

{ boost::thread th(worker, 10); th.join();}

Page 30: Study3 boost

今日から使えるライブラリの紹介

Boost.Function

Page 31: Study3 boost

今日から使えるライブラリの紹介

Boost.Function 汎用関数オブジェクト

Page 32: Study3 boost

今日から使えるライブラリの紹介

Boost.Function 汎用関数オブジェクト 関数ポインタとメンバ関数ポインタを統一

的に扱える そのまま std::for_each() に渡したり出来る

Page 33: Study3 boost

今日から使えるライブラリの紹介

Boost.Function

struct mul { mul(int m) : m_(m) {} int operator()(int n) const { return n * m_; } int m_;};boost::function<int(int)> func(mul(3)); //callstd::cout << func(2) << std::endl; //6

Page 34: Study3 boost

今日から使えるライブラリの紹介

Boost.Assign

Page 35: Study3 boost

今日から使えるライブラリの紹介

Boost.Assign コンテナを簡単に初期化

Page 36: Study3 boost

今日から使えるライブラリの紹介

Boost.Assign

using namespace boost::assign;

std::vector<int> vs;vs += 1, 2, 3, 5, 8, 13;

std::list<int> ls = list_of(1)(4)(9)(16);

std::cout << vs[3] << std::endl; //5std::cout << ls.back() << std::endl; //16

Page 37: Study3 boost

今日から使えるライブラリの紹介

Boost.Regex

Page 38: Study3 boost

今日から使えるライブラリの紹介

Boost.Regex 正規表現ライブラリ ビルドが必要

Page 39: Study3 boost

今日から使えるライブラリの紹介

Boost.Regex

boost::regex r("魔法少女");

std::string text = "僕と契約して魔法少女になってよ!";std::string to = "C++er";std::cout << boost::regex_replace( text, r, to, boost::format_all ) << std::endl;

Page 40: Study3 boost

その他、今日役立つBoost の紹介

Page 41: Study3 boost

その他、今日役立つ Boost LexicalCast : 文字列 <->数値の変換など Format : printf-like書式変換 Graph : STL 状のグラフライブラリ Property Tree : Config等向きデータ構造 Math : 数学ライブラリ Spirit.Qi : PEGパーサー DESL String Algo : 文字列処理 MultiArray : 多次元配列

Page 42: Study3 boost

まとめ

Page 43: Study3 boost

まとめ

全然紹介しきれないです。 Boost は C++ を加速させます。 もっと Boost についてちゃんと知りたい方

は”プログラミングの魔導少女”の高橋 晶さんの記事をご覧になってください。http://sites.google.com/site/sapporocpp/linguamagi/

Page 44: Study3 boost

まとめ

来月 11/05に Boost.勉強会 #6 札幌を開催します!

先に名前の登場している高橋 晶さんをはじめ、 C++界のハイレベルな人たちも全国各地から札幌に集まります。

Page 45: Study3 boost

まとめ

それでは、本番始めていきましょう。