Your SlideShare is downloading. ×
0
Boost Tour 1.48.0 diff
Boost Tour 1.48.0 diff
Boost Tour 1.48.0 diff
Boost Tour 1.48.0 diff
Boost Tour 1.48.0 diff
Boost Tour 1.48.0 diff
Boost Tour 1.48.0 diff
Boost Tour 1.48.0 diff
Boost Tour 1.48.0 diff
Boost Tour 1.48.0 diff
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Boost Tour 1.48.0 diff

3,930

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,930
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
11
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

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

×