boost
そういえば、使ったことがないので試してみた。 Boost.ScopeExit を使用すると『そのスコープを抜けるときの処理』を記述する事ができます。 例えば、スコープの最初の方に『最後に呼ばれる処理』みたいなことを定義する事ができます。 [ソース] #define BOO…
みたいな話が Lingr の C++ 部屋で出てた。 そういうことを実現したい場合は Boost.Fusion を使うのが現実的かな? (reinterpret_cast で無理やり変換してしまうという手が無いわけではないのだけれどさすがにアレ過ぎるので。 [ソース] // 構造が全く同じ…
と、いうのを書きたかっただけ。 [ソース] #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>…
とりあえず、自前で入れるのがちょっとめんどくさかったので apt-get で。 $ sudo apt-get isntall libboost-dev 特にパスを設定する必要もなくこれで boost が使えるように。 ただ、Ubuntu 13.10 だと Boost 1.53 とちょっと古めなので自前で最新版を入れて…
前回の記事で『関数の型を書くのがめんどくさい』と書いたら 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>…
以前から気になっていたんですがやっと試してみました。 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>…
リリース前から気になっていたんですが、すっかり忘れていたので簡単に試してみました。 [ソース] #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 がリリースされました。 Version 1.55.0 - boost Boost 1.55.0 では Predef が新しいライブラリとして追加されます。 Predef OS やアーキテクチャなどのコンパイル環境を定義済みマクロで利用できる また、Visual Studio 2013 では既知のバグが…
Version 1.55.0 - work in progress Predef OS やアーキテクチャなどのコンパイル環境を定義済みマクロで利用できる 新しいライブラリとして predef が追加されます。 predef はちょっと気になっていたライブラリなんですが、Boost に追加されるみたいですね…
以前、『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>…
元ネタ:終了処理をするメンバ関数の違いを吸収してくれるカスタムデリータ - 凹み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>…
さて、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 がリリースされました。 Version 1.54.0 - boost Boost 1.54.0 では以下の3つのライブラリが新しく追加されます。 Boost.Log 2.0 The Type Traits Introspection Library Boost.TypeErasure これでやっと Boost.TypeErasure が使うことができま…
元ネタ : 誰もが一度は陥る日付処理。各種プログラミング言語におけるDateTime型/TimeStamp型の変換方法のまとめ 昨日に続いて同じネタなんですが Boost がなかったのと Boost.Date_Time あまり使ったことがないので練習がてら書いてみました。 [現在時刻のD…
この手の処理はいくつか手段があると思うのですが、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>…
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 実装されたし簡単になりそうだよなーってことで書いてみた。 [ソース] #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 のシーケンスの要素にアクセスする場合、次のようにコンパイル時定数を用いてアクセスする必要があります。 auto v = f::make_vector(42, std::string("homu"), 3.14f, std::string("mado")); constexpr int index0 = 0; int n = f::get<index0>(</index0>…
これの 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>…
たった10行のコードでひたすらアイドル水着画像をあつめる - UT Startup Gym たった 4 行のコードでひたすらアイドル水着画像をあつめる(Python だよ) - maeharinの日記 たった3行のコードでひたすらアイドル水着画像をあつめる(Rubyだよ) - Memo いまさら…
元ネタ httpstatus コマンドで、HTTP のステータスコードをすばやくしらべる! - tokuhirom's blog. httpstatus コマンドで、HTTP のステータスコードをすばやくしらべる! - Big Sky httpstatus コマンドで、HTTP のステータスコードをすばやくしらべる! - ゆ…
昨日の続き。 昨日とは違い、その数値が収まる 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>…
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.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>
こういう時こそ 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 は数値以外にも文字列で初期化する事が出来ます。 [ソース] #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 に対応しているみたいです。 演算子は未対応みたいですが。 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 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>…
リハビリがてら軽く書いてみました。 [ソース] #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 がリリースされました。 Version 1.53.0 - boost 日本語版リリースノート - boostjp 1.53.0 では次のライブラリが新しく追加されます。 Atomic: C++11-style atomic<>, from Helge Bahmann, maintained by Tim Blechmann. Coroutine: Coroutine…