boost

Sprout の make_array と make_common_array

最近 Boost ML で『make_array を用意しよう』みたいな提案がなされています。 Proposal: boost::make_array() 内容はあんまり読んでないんですが個人的にはあってもいいかなーと思っています。 最終的にどうなるんかな。 で、それはそれとして Sprout.Array…

pstade::oven::outdirected の実装と Boost.Range でエミュレート

pstade::oven::outdirected の実装がどうなっているのかなーとソースコードを見てみたら pstade::oven::counting でラップしているだけでした。 こんな感じ。 std::vector<int> v = {1, 2, 3, 4, 5}; auto outdirect = pstade::oven::counting(std::begin(v), std</int>…

algorithm のコールバック関数で iterator を受け取りたかった

for_each や find_if 等を使う時に、値ではなくて iterator として関数で受け取りたい場合があったのでちょっと調べてみました。 要は Boost.Range にある indirected の逆。 Boost.Range には見当たらなかったんですが PStade.Oven の を使えばいいみた。 […

Boost.Coroutine でジェネレータ その2

ちょっと変えてみた。 coroutine は std::shared_ptr で保持。 [ソース] #include <boost/coroutine/coroutine.hpp> #include <iostream> #include <functional> #include <memory> std::function<int()> counter_generator(int start, int step){ typedef boost::coroutines::coroutine<int()> coroutine_type; auto coroutine = std::ma</int()></int()></memory></functional></iostream></boost/coroutine/coroutine.hpp>…

Boost.TypeErasure any のコンストラクタで暗黙の呼び出しを行いたい

[追記] この問題はリリース版である Boost 1.54.0 では動作するようになりました。 さて、Boost.TypeErasure any のコンストラクタでは explicit で定義されているため、次のように関数にコンセプトを満たす型を渡す場合、明示的に型変換を行なってから渡さ…

Boost.Range には std::for_each をラップした boost::for_each が 定義されているんですが、それとは別に にも boost::for_each が定義されていたので違いを調べてみました。 どうやら range を2つ受け取れるみたいです。 [ソース] #include <boost/range/algorithm_ext/for_each.hpp> #include <boost/range/algorithm/for_each.hpp> #in</boost/range/algorithm/for_each.hpp></boost/range/algorithm_ext/for_each.hpp>…

Boost.Serialization でコンテナを標準出力

Boost.Serialization でコンテナの中身を出力出来ないかなーってことで試してみました。 [ソース] #include <boost/serialization/serialization.hpp> #include <boost/serialization/vector.hpp> #include <boost/serialization/map.hpp> #include <boost/serialization/string.hpp> #include <boost/archive/text_oarchive.hpp> #include <iostream> #includ…</iostream></boost/archive/text_oarchive.hpp></boost/serialization/string.hpp></boost/serialization/map.hpp></boost/serialization/vector.hpp></boost/serialization/serialization.hpp>

Boost.Coroutine で乱数のジェネレータ

とりあえず、簡単に。 ジェネレータといいつつ、なんか違うような気がしないでもない。 [ソース] #include <boost/coroutine/coroutine.hpp> #include <boost/coroutine/all.hpp> #include <vector> #include <iostream> #include <random> #include <functional> #include <cstdint> typedef boost::coroutines::coroutine<int()> coroutine_type; void random_generat…</int()></cstdint></functional></random></iostream></vector></boost/coroutine/all.hpp></boost/coroutine/coroutine.hpp>

std::tuple を標準出力する

現状は Boost.Fusion を使うのが一番楽かな。 [ソース] #include <tuple> #include <boost/fusion/include/io.hpp> #include <boost/fusion/include/as_vector.hpp> #include <boost/fusion/adapted/std_tuple.hpp> #include <iostream> int main(){ auto t = std::make_tuple(42, 3.14f, "homu"); std::cout << boost::fusion::as_vector(t)…</iostream></boost/fusion/adapted/std_tuple.hpp></boost/fusion/include/as_vector.hpp></boost/fusion/include/io.hpp></tuple>

Boost.Coroutine 触ってみた

Boost.Coroutine が採用されたということで簡単に触ってみました。 ソースコード:http://ok73.funpic.de/boost-coroutine.zip. ドキュメント:http://ok73.ok.funpic.de/boost/libs/coroutine/doc/html/ ソースコードはどこにあるか分からなかったので ML …

第2回 Boost.読書会

行いました。 [ログ] #2 Variant - co-meeting [参加メンバー] Shigemasa Watanabe Tomohiro Kashiwada faith_and_brave manga_osyo saki7 計5名 [所感] 今回はわたしが進行役だったんですが、いろいろとバタバタしてしまっていてすみません…。 サポートあり…

Boost 1.52.0 がリリース

Boost 1.52.0 がリリースされました。 Version 1.52.0 Boost 1.52.0 リリースノート(日本語版) 新しいライブラリはないですが、Boost.Thread がだいぶ修正されているらしいです。 しかし、この間 1.51.0 がリリースされたと思ったらもう 1.52.0 がリリースさ…

全ての型を継承する型を定義

Boost.MPL の inherit を使用すれば、テンプレート引数型を全て継承する型を定義することが出来ます。 [ソース] #include <boost/mpl/inherit.hpp> #include <iostream> #include <type_traits> struct X1{ int value; }; struct X2{ void func() const{ std::cout << "X2" << std::endl; } }; int main(){ </type_traits></iostream></boost/mpl/inherit.hpp>…

Boost.読書会やります!!

また読書会かよ!!って感じではあるんですが、lingr でノリノリに雑談していたらいつの間にか Boost.読書会をやる事になりました。 な、何をいっているのかry。 こっちは C++オンライン読書会と違って結構真面目です。 例によってオンラインの読書会になり…

C++オンライン読書会のまとめページを作成した

『C++Now! 読書会』改め C++オンライン読書会のページを boostjp につくりました。 vimrc読書会のページとレイアウトが似ていますが全くの偶然です。 C++オンライン読書会 - boostjp 名前を変更したのは C++Now! 以外にも読みたいというリクエストが多かった…

第4回 C++Now! 読書会

どうみてもぼっちです本当にry。 ※あとから人が増えました。 最初は1人で黙々と読んでいました。 Boost.Asio わからないマン。 [読んだ資料] 非同期について考える : Boost.Asioを使用したアプリケーション設計 [ログ] http://lingr.com/room/reading_cpp_n…

条件演算子で Boost.Optional を返す

覚書。 boost::optional<int> m = cond ? 42 : boost::none; みたいな感じで boost::none を含めた条件演算子を書きたいんですが、これでは型が違ってしまい、エラーになってしまいます。 と、いうことでこれを回避する場合 boost::make_optional でラップします</int>…

条件演算子で Boost.Optional を返す

覚書。 boost::optional<int> m = cond ? 42 : boost::none; みたいな感じで boost::none を含めた条件演算子を書きたいんですが、これでは型が違ってしまい、エラーになってしまいます。 と、いうことでこれを回避する場合 boost::make_optional でラップします</int>…

Boost.Generic が sandbox にて公開された

Boost.Generic, C++0x Concepts, and C++1y Concepts Boost.Generic - boostjp Boost.Generic ソースコード - sandbox 去年の BoostCon 2011 で発表されたあたまおかしい Boost.Generic が sandbox にて公開されました。 メールに色々と書いてあるんですが、…

Boost.TypeErasure の any でデフォルトコンストラクタを使用する

any のデフォルトコンストラクタを使用する場合は Concept に relaxed_match を定義する必要があります。 [ソース] #include <boost/type_erasure/any.hpp> #include <boost/type_erasure/member.hpp> #include <boost/mpl/vector.hpp> #include <iostream> BOOST_TYPE_ERASURE_MEMBER((has_call), call, 1) struct X { void call(int n){ std::cout << "X</iostream></boost/mpl/vector.hpp></boost/type_erasure/member.hpp></boost/type_erasure/any.hpp>…

BOOST_FUSION_DEFINE_STRUCT 内で fusion::vector を使用する

BOOST_FUSION_DEFINE_STRUCT 内で下記のように fusion::vector を使いたい場合があるとします。 BOOST_FUSION_DEFINE_STRUCT( BOOST_PP_EMPTY(), person, (std::string, name) (fusion::vector<int, int>, pos) ) しかし、これでは "fusion::vector" が別々の引数であ</int,>…

グローバル空間で BOOST_FUSION_DEFINE_STRUCT を定義する

BOOST_FUSION_DEFINE_STRUCT でクラスを定義する場合、 名前空間 クラス名 クラスのメンバ を渡して定義するのですが、名前空間を指定しない場合(グローバル空間)もあると思います。 この場合は名前空間に BOOST_PP_EMPTY() を渡せばいいみたいです。 [ソ…

第2回 C++Now! 読書会を開催しました

無事に2回目を終了することが出来ました。 参加者の皆さんはお疲れ様でした。 [読んだ資料] Metaparse – テンプレートメタプログラミングによるコンパイル時構文解析 mpllibs - githubx [ログ] http://lingr.com/room/reading_cpp_now_2012_doc/archives/201…

Boost.Fusion の invoke に関数テンプレートを渡したかった

invoke であれば引数に sequence を渡すので 『そこから関数のシグネチャが推論出来るんじゃね?』 とか思ったんですが、引数型は推論出来ても戻り値型が推論できなくて無理でした。 とりあえず、こんな感じ。 [ソース] #include <boost/fusion/include/vector.hpp> #include <boost/fusion/include/make_vector.hpp> #include <boost/fusion/include/invoke.hpp> #incl</boost/fusion/include/invoke.hpp></boost/fusion/include/make_vector.hpp></boost/fusion/include/vector.hpp>…

Boost.TypeErasure の any は暗黙の型変換が行われない

Boost.TypeErasure の any のコンストラクタは explicit で定義されており、暗黙の型変換が行われません。 これは次のように関数の引数に any を使用する場合に問題になります。 [ソース] #include <boost/type_erasure/any.hpp> #include <boost/type_erasure/operators.hpp> #include <boost/mpl/vector.hpp> #include <iostream> typedef boost::mpl::vect</iostream></boost/mpl/vector.hpp></boost/type_erasure/operators.hpp></boost/type_erasure/any.hpp>…

第1回 C++Now! 読書会を開催しました

行いました。 まさかの4時間という長丁場になってしましましたが参加された方はお疲れ様でした。 [読んだ資料] モナドを使って可変長テンプレートメタプログラミング ※参考資料 Expressive C++: Expression Optimization - C++Next [ログ] http://lingr.com/…

Boost.TypeErasure で多重定義の呼び出し

Boost.TypeErasure では any の Concept に複数のシグネチャを定義することで多重定義されているメンバ関数を呼び出すことが出来ます。 BOOST_TYPE_ERASURE_MEMBER を使用した場合はこんな感じです。 [ソース] #include <boost/type_erasure/any.hpp> #include <boost/type_erasure/member.hpp> #include <boost/mpl/vector.hpp> #include <type_traits> BOOS</type_traits></boost/mpl/vector.hpp></boost/type_erasure/member.hpp></boost/type_erasure/any.hpp>…

Boost.TypeErasure で特定の関数で多重定義されているオブジェクトを保持する

さて、Boost.TypeErasure は基本的に保持する型に対してメンバ関数などを要求するのですが、次のように多重定義された関数を呼び出すことで、型に対して非侵入的に Concept を要求する事が出来ます。 [ソース] #include <boost/type_erasure/any.hpp> #include <boost/type_erasure/builtin.hpp> #include <boost/mpl/vector.hpp> #include <iostream> temp</iostream></boost/mpl/vector.hpp></boost/type_erasure/builtin.hpp></boost/type_erasure/any.hpp>…

Boost.TypeErasure でダウンキャスト

Concept に typeid_<> を定義することで any_cast を使用したダウンキャストを行うことが出来ます。 [ソース] #include <boost/type_erasure/any.hpp> #include <boost/type_erasure/any_cast.hpp> #include <boost/mpl/vector.hpp> #include <iostream> int main(){ namespace te = boost::type_erasure; te::any< boost::mpl::vector< te::typeid_<>, te::</iostream></boost/mpl/vector.hpp></boost/type_erasure/any_cast.hpp></boost/type_erasure/any.hpp>…

Boost.Contract

ML で Boost.Contract のレビューが開始されたというのを見て、自分もちょっと触ってみました。 Boost.Contract は契約プログラミングを行うためのライブラリみたいですね。 Boost.Contract Review Starts Today ドキュメント:http://contractpp.sourceforg…