Boost Tour 1.48.0 diff
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Boost Tour 1.48.0 diff

on

  • 4,270 views

 

Statistics

Views

Total Views
4,270
Views on SlideShare
1,983
Embed Views
2,287

Actions

Likes
1
Downloads
11
Comments
0

5 Embeds 2,287

http://d.hatena.ne.jp 2256
http://faithandbrave.hateblo.jp 26
http://a0.twimg.com 2
http://paper.li 2
http://webcache.googleusercontent.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Boost Tour 1.48.0 diff Presentation Transcript

  • 1. Boostライブラリ一周の旅 ver.1.48.0 高橋晶(Akira Takahashi) id:faith_and_brave @cpp_akira Boost.勉強会#7 2011/12/03(土)
  • 2. はじめに前回は、Boost 1.44.0までのライブラリを紹介しまし た。今回は1.45.0から1.48.0までに追加されたライブラ リを紹介していきます。
  • 3. 本日紹介するライブラリ1. Interval Container2. Chrono3. Geometry4. Phoenix5. Container6. Move
  • 4. Interval Container(ICL)区間演算のコンテナを提供するライブラリ。typedef std::set<string> guests;interval_map<ptime, guests> party;party += make_pair(interval<ptime>::right_open( time_from_string("20:00"), time_from_string("22:00")), make_guests("Mary"));party += make_pair(interval<ptime>::right_open( time_from_string("21:00"), time_from_string("23:00")), make_guests("Harry"));[20:00, 21:00)->{"Mary"}[21:00, 22:00)->{"Harry","Mary"} //時間帯が重なっていたら集約される[22:00, 23:00)->{"Harry"}
  • 5. Chrono時間計算のためのライブラリ。C++11標準ライブラリに導入されたものと、その拡張。// 500ナノ秒遅延するnamespace chrono = boost::chrono;auto go = chrono::steady_clock::now() + chrono::nanoseconds(500);while (chrono::steady_clock::now() < go) ;様々な時間の単位と、いくつかの特性をもった時計クラスが提供される。CPU時間を扱う拡張もある。
  • 6. Geometry 計算幾何のライブラリ。 N次元の点、線、三角形、四角形などのモデルと、 それらに対するアルゴリズムが提供される。polygon a, b;geometry::exterior_ring(a) = assign::list_of<point>(0, 0)(3, 3)(0, 3)(0, 0);geometry::exterior_ring(b) = assign::list_of<point>(1.5, 1.5)(4.5, 4.5)(1.5, 4.5)(1.5, 1.5);// 2つのポリゴンが交わっているかconst bool result = geometry::intersects(a, b);BOOST_ASSERT(result);
  • 7. Phoenix新たなラムダ式のライブラリ。通常の関数を部分適用可能な形式にアダプトしたりできる。関数オブジェクトを返すSTL風アルゴリズムも提供される。namespace ns { int plus(int a, int b) { return a + b; }}BOOST_PHOENIX_ADAPT_FUNCTION(int, plus, ns::plus, 2)using namespace boost::phoenix::arg_names;int result = plus(arg1, 2)(3); // plus関数を部分適用std::cout << result << std::endl;5
  • 8. Container標準コンテナのBoost実装。placement insertやmoveなどの最新の仕様が提供される。struct Person { int id; std::string name; Person() {} Person(int id, const std::string& name) : id(id), name(name) {}};boost::container::vector<Person> v;// これまで通りのpush_backだが、一時オブジェクトならmoveされるv.push_back({1, "Alice"});// 関数内部でコンストラクタを呼び出すplacement insertv.emplace_back(2, "Bob");
  • 9. MoveムーブセマンティクスのC++03実装。一時オブジェクトのコストを軽減する。template <class T>void swap(T& a, T& b){ T tmp(boost::move(a)); a = boost::move(b); b = boost::move(tmp);}
  • 10. まとめ(?)• まとめはとくにありません。• ここでは差分のみを紹介しましたが、1.48.0までのライブラリ をまとめたスライドも別途用意しています。 全体を知りたい方はそちらを参照してください。Boostライブラリ一周の旅 1.48.0(all)http://www.slideshare.net/faithandbrave/boost-tour-1480-all