boost

Boost.ScopeExit 使ってみた

そういえば、使ったことがないので試してみた。 Boost.ScopeExit を使用すると『そのスコープを抜けるときの処理』を記述する事ができます。 例えば、スコープの最初の方に『最後に呼ばれる処理』みたいなことを定義する事ができます。 [ソース] #define BOO…

C++ で中身が同じ構造体を相互変換する

みたいな話が Lingr の C++ 部屋で出てた。 そういうことを実現したい場合は Boost.Fusion を使うのが現実的かな? (reinterpret_cast で無理やり変換してしまうという手が無いわけではないのだけれどさすがにアレ過ぎるので。 [ソース] // 構造が全く同じ…

Boost.Signals2 で false を返すと disconnect する

と、いうのを書きたかっただけ。 [ソース] #include <boost/signals2.hpp> #include <iostream> template<typename F, typename ...Args> boost::signals2::connection connect(boost::signals2::signal<void(Args...)>& sig, F func){ auto connecter = [=](boost::signals2::connection const& connection, Args... args){ if( !func(ar</void(args...)></typename></iostream></boost/signals2.hpp>…

Ubuntu に boost を入れた

とりあえず、自前で入れるのがちょっとめんどくさかったので apt-get で。 $ sudo apt-get isntall libboost-dev 特にパスを設定する必要もなくこれで boost が使えるように。 ただ、Ubuntu 13.10 だと Boost 1.53 とちょっと古めなので自前で最新版を入れて…

make_overloaded_function 使ってみた。

前回の記事で『関数の型を書くのがめんどくさい』と書いたら id:RiSK さんから『make_overloaded_function があるよ』とコメントで教えて頂いたので試してみました。 [ソース] #include <boost/functional/overloaded_function.hpp> #include <boost/lexical_cast.hpp> #include <string> #include <iostream> std::string to_string(int n){ retur</iostream></string></boost/lexical_cast.hpp></boost/functional/overloaded_function.hpp>…

Boost.Functional/OverloadedFunction を試してみた

以前から気になっていたんですがやっと試してみました。 OverloadedFunction を使用すれば複数の関数を1つの関数オブジェクトにまとめる事ができます。 [ソース] #include <boost/functional/overloaded_function.hpp> #include <boost/lexical_cast.hpp> #include <string> #include <iostream> std::string to_string(int n){ return boost::lexi</iostream></string></boost/lexical_cast.hpp></boost/functional/overloaded_function.hpp>…

Boost.Predef つかってみた

リリース前から気になっていたんですが、すっかり忘れていたので簡単に試してみました。 [ソース] #include <boost/config.hpp> #include <boost/predef.h> #include <iostream> int main(){ std::cout << BOOST_COMPILER << std::endl; #if BOOST_OS_WINDOWS std::cout << "OS is Windows." << std::endl</iostream></boost/predef.h></boost/config.hpp>…

Boost 1.55.0 がリリース

Boost 1.55.0 がリリースされました。 Version 1.55.0 - boost Boost 1.55.0 では Predef が新しいライブラリとして追加されます。 Predef OS やアーキテクチャなどのコンパイル環境を定義済みマクロで利用できる また、Visual Studio 2013 では既知のバグが…

Boost 1.55.0 のリリースノート(予定)

Version 1.55.0 - work in progress Predef OS やアーキテクチャなどのコンパイル環境を定義済みマクロで利用できる 新しいライブラリとして predef が追加されます。 predef はちょっと気になっていたライブラリなんですが、Boost に追加されるみたいですね…

Boost.TypeErasure の any で暗黙の型変換が行われるようになっていた

以前、『Boost.TypeErasure の any は暗黙の型変換が行われない』という記事を書いたのですが、リリース版の Boost.TypeErasure(Boost 1.54.0)ではこの挙動が変更されており、暗黙の型変換が行われるようになっていました。 [ソース] #include <boost/type_erasure/any.hpp> #include <boost/type_erasure/operators.hpp> </boost/type_erasure/operators.hpp></boost/type_erasure/any.hpp>…

Boost.TTI を使ってみる

元ネタ:終了処理をするメンバ関数の違いを吸収してくれるカスタムデリータ - 凹みTips Boost.TTI が利用できるよさげなネタがあったので書いてみました。 [ソース] #include <boost/tti/has_member_function.hpp> BOOST_TTI_HAS_MEMBER_FUNCTION(close) // => has_member_function_close struct </boost/tti/has_member_function.hpp>…

Boost.Optional で Ruby の || 演算子のような挙動を行う

さて、Ruby の || 演算子は次のような挙動になります。 n1 = 42 || 12 puts n1 # => 42 n2 = false || 12 puts n2 # => 12 n3 = 42 || false puts n3 # => 42 このように Ruby の || 演算子は最初に真になった値を返します。 これを Boost.Optional を使って…

Boost 1.54.0 がリリース

Boost 1.54.0 がリリースされました。 Version 1.54.0 - boost Boost 1.54.0 では以下の3つのライブラリが新しく追加されます。 Boost.Log 2.0 The Type Traits Introspection Library Boost.TypeErasure これでやっと Boost.TypeErasure が使うことができま…

Boost で日付処理

元ネタ : 誰もが一度は陥る日付処理。各種プログラミング言語におけるDateTime型/TimeStamp型の変換方法のまとめ 昨日に続いて同じネタなんですが Boost がなかったのと Boost.Date_Time あまり使ったことがないので練習がてら書いてみました。 [現在時刻のD…

Boost.Interprocess でアプリケーショの多重起動を防止する

この手の処理はいくつか手段があると思うのですが、Boost.Interprocess で書いてみました。 [ソース] #include <boost/interprocess/managed_shared_memory.hpp> #include <cstdio> #include <string> #include <cstdlib> int main(int argc, char* argv[]){ namespace ipc = boost::interprocess; try{ ipc::shared_memory_object se</cstdlib></string></cstdio></boost/interprocess/managed_shared_memory.hpp>…

Boost 1.54.0 では新しいライブラリとして Log, TTI, TypeErasure が追加される

Version 1.54.0 - boost.org Log: Logging library, from Andrey Semashev. TTI: Type Traits Introspection library, from Edward Diener. Type Erasure: Runtime polymorphism based on concepts. ついに…!という感じですが Boost 1.54.0 では新しいライ…

Inheriting constructor を使って Variadic Templates 対応版 Boost.Fusion vector

そういえば、Inheriting constructor 実装されたし簡単になりそうだよなーってことで書いてみた。 [ソース] #include <boost/fusion/include/make_vector.hpp> #include <boost/fusion/include/io.hpp> #include <boost/fusion/include/at_c.hpp> #include <iostream> template<typename base> struct inheriting_constructor : base { using base::base; }; temp…</typename></iostream></boost/fusion/include/at_c.hpp></boost/fusion/include/io.hpp></boost/fusion/include/make_vector.hpp>

Boost.Fusion のシーケンスに動的にアクセスする

さて、Boost.Fusion のシーケンスの要素にアクセスする場合、次のようにコンパイル時定数を用いてアクセスする必要があります。 auto v = f::make_vector(42, std::string("homu"), 3.14f, std::string("mado")); constexpr int index0 = 0; int n = f::get<index0>(</index0>…

たった 20 行のコードでひたすらアイドル水着画像をあつめる(C++ + cpp-netlib だよ)

これの cpp-netlib 版です。 cpp-netlib: The C++ Network Library 最新版だとヘッダーオンリーで使えないっぽいのでライブラリをビルドしてリンクする必要があります。 [ソース] #include <boost/network.hpp> #include <boost/xpressive/xpressive.hpp> #include <iostream> int main(){ namespace http = boost::networ</iostream></boost/xpressive/xpressive.hpp></boost/network.hpp>…

たった 37 行のコードでひたすらアイドル水着画像をあつめる(C++ + Boost.Asio だよ)

たった10行のコードでひたすらアイドル水着画像をあつめる - UT Startup Gym たった 4 行のコードでひたすらアイドル水着画像をあつめる(Python だよ) - maeharinの日記 たった3行のコードでひたすらアイドル水着画像をあつめる(Rubyだよ) - Memo いまさら…

httpstatus コマンドで(ry

元ネタ httpstatus コマンドで、HTTP のステータスコードをすばやくしらべる! - tokuhirom's blog. httpstatus コマンドで、HTTP のステータスコードをすばやくしらべる! - Big Sky httpstatus コマンドで、HTTP のステータスコードをすばやくしらべる! - ゆ…

User-defined literals で固定長の Boost.Multiprecision を生成の続き

昨日の続き。 昨日とは違い、その数値が収まる 2のn乗のビット幅を使用するようにしてみました。 [ソース] #include <boost/multiprecision/cpp_int.hpp> template<char ...cs> struct chars{}; constexpr bool operator <=(chars<>, chars<>){ return true; } template<char ...cs> constexpr bool operator <=(chars<></char></char></boost/multiprecision/cpp_int.hpp>…

User-defined literals で固定長の Boost.Multiprecision を生成

template で受け取る User-defined literals を定義すれば sizeof...(cs) で数値の長さ(桁数)が取得出来ます。 template<char ...cs> constexpr std::size_t operator "" _cpp_int(){ return sizeof...(cs); } static_assert(1234_cpp_int == 4, ""); static_assert(12</char>…

Boost.Multiprecision と Boost.Flyweight でフィボナッチ数列

まぁ Boost.Flyweight でメモ化されているフィボナッチ数列のコードを Boost.Multiprecision で置き換えただけなんですが。 [ソース] #include <iostream> #include <boost/multiprecision/number.hpp> #include <boost/multiprecision/cpp_int.hpp> #include <boost/flyweight.hpp> #include <boost/flyweight/key_value.hpp> #include </boost/flyweight/key_value.hpp></boost/flyweight.hpp></boost/multiprecision/cpp_int.hpp></boost/multiprecision/number.hpp></iostream>

Boost.Multiprecision を User-defined literals を使って初期化

こういう時こそ User-defined literals の出番! ってことでやってみました。 [ソース] #include <boost/multiprecision/cpp_int.hpp> #include <string> boost::multiprecision::cpp_int operator "" _cpp_int(char const* str){ return boost::multiprecision::cpp_int(str); } int main(){ // 文字列</string></boost/multiprecision/cpp_int.hpp>…

Boost.Multiprecision を文字列で初期化

Boost.Multiprecision は数値以外にも文字列で初期化する事が出来ます。 [ソース] #include <boost/multiprecision/cpp_int.hpp> #include <boost/multiprecision/cpp_dec_float.hpp> #include <string> boost::multiprecision::cpp_int operator "" _cpp_int(char const* str, std::size_t){ return boost::multiprecision::cpp_int(str); } int</string></boost/multiprecision/cpp_dec_float.hpp></boost/multiprecision/cpp_int.hpp>…

Boost.Multiprecision の constexpr 対応

Boost.Multiprecision では固定長オブジェクトのコンストラクタが constexpr に対応しているみたいです。 演算子は未対応みたいですが。 Literal Types and constexpr Support - boost [ソース] #include <boost/multiprecision/cpp_int.hpp> #include <boost/multiprecision/number.hpp> int main(){ namespace bm = boost::mult</boost/multiprecision/number.hpp></boost/multiprecision/cpp_int.hpp>…

Boost.Multiprecision を触ってみた

Boost 1.53.0 で多倍長整数ライブラリである Boost.Multiprecision が追加されたのでフィボナッチ数列を出力してみた。 コード自体はベタ書き。 [ソース] #include <iostream> #include <boost/multiprecision/cpp_int.hpp> int main(){ typedef boost::multiprecision::cpp_int int_type; int_type first</boost/multiprecision/cpp_int.hpp></iostream>…

Boost.Coroutine でフィボナッチ

リハビリがてら軽く書いてみました。 [ソース] #include <iostream> #include <boost/coroutine/all.hpp> template<typename C> void fibonacci(C& c){ typedef typename C::arg_type value_type; value_type first = 0; c(first); value_type second = 1; c(second); while( 1 ){ value_type third = first </typename></boost/coroutine/all.hpp></iostream>…

Boost 1.53.0 がリリース

Boost 1.53.0 がリリースされました。 Version 1.53.0 - boost 日本語版リリースノート - boostjp 1.53.0 では次のライブラリが新しく追加されます。 Atomic: C++11-style atomic<>, from Helge Bahmann, maintained by Tim Blechmann. Coroutine: Coroutine…