サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
円安とは
iorate.hatenablog.com
C++で、複数のスレッドから1つのオブジェクトにアクセスするときに同期をとる方法いろいろ。 1. atomicを使う 使える型は限られるが、お手軽。 std::atomic<int> x(0); boost::thread_group threads; for (int i = 0; i < 4; ++i) { threads.create_thread([&] { for (int i = 0; i < 1000000; ++i) ++x; }); } threads.join_all(); std::cout << x << std::endl; // 4000000 これはatomic<T>を使う例。 アトミックな操作を順に実行するだけのコードはアトミックでないことに注意。 2. クラスの中でロックする class integer { public: int get_value()
C++の標準には多倍長整数ライブラリがありません。これは大変なことだと思います。 まあBoost.Multiprecision来るじゃないというのはさておき、 標準の多倍長整数がないなら他言語の標準から持ってくればいいということで、HaskellのIntegerをラップしてC++の多倍長整数クラスにしてみました。 まずIntegerを扱う関数をFFIでエクスポートします。Integerを引数・戻り値にする関数はエクスポートできないので、代わりにStablePtr Integerを使います。これはIntegerオブジェクトを指すポインタで、GCに回収・再配置されない保証があります。CやC++からはただのvoid *に見えます。 とりあえずfromIntegral、(*)、showをエクスポートしました(今回は乗法と出力がしたいので)。StablePtr IntegerとCStringの解放関
Iteratee を始めようと思いこちらを読んでいたのですが, Lazy I/O must go! - Iteratee: 列挙ベースのI/O - 純粋関数型雑記帳 気になるフレーズが. streamToFile "hoge" `enumPair` throbber とすることにより、ファイル書き込みに簡単に進捗表示をつけることができるようになります。その他、時間のかかるような処理にプログレスバー表示を取り付けたりするのも簡単です。 http://d.hatena.ne.jp/tanakh/20100824#p1 進捗表示?プログレスバー表示? … … … それは progress_display ではありませんか? ※ progress_display について letsboost::progress_display Boost.Timer V2 - Faith and Brave -
これは C++11 Advent Calendar 2011 の参加記事 (15日目) です. この記事では「Iterator ではなく Range を使おう」という話をします.既に何度も言われている話ではありますが,私も一度書いてみたかったのでこの機会に書きます.でもそんなに新しいことは言わないと思います. 話の流れとしては,従来の Iterator にはこんな欠点が → それ Range ならうまく書けるよ → さらに Range 使ってこんなこともできるよ → C++11 での Range という感じになります. 従来の Iterator の問題点 Iterator は STL の主要なコンセプトで,Container と Algorithm を橋渡しする役割を持っています. std::vector<int> v = { 8, 4, 3, 7, 6, 5, 2, 1 }; std::
こういう記事も必要かもしれないと思いました.内容はタイトルそのままです. はじめに はじめに,と書きましたがこの項は飛ばしても問題ないです. まず "lvalue" とか "rvalue" とかいうものが何についての概念なのかということですが,これらは C++ の "式" の持つ属性 "value category" の値です."式" には他に "型" という属性があります. int i = 0; i; // 式 i の型は int,value category は lvalue 0; // 式 0 の型は int,value category は rvalue 型の決め方は難しくないと思うので (たぶん),この記事では value category の決め方を書きます.以降,"i は int の lvalue である" といった言い方をします. Lvalue,rvalue のイメージ い
has_xxx とは型 x にネストされた名前 name があるかどうか調べるメタ関数の総称です。名前空間またはクラスのスコープでクラステンプレート has_name を定義し、その上で has_name<x>::value などとして使います。 本の虫: C++11におけるモダンなhas_xxxの実装 しかし、一発で has(x, name) と書けると素敵です。C++14 で入るであろう Generic Lambdas (N3559) を使ってそれを書いてみました。 ※ Concept Lite (N3580) の requires expression が来れば、素直にそれを使うべきです。 // 下準備... namespace has_xxx_detail { template <class F, class G> struct overload_result : F, G { o
元ネタ constexpr で扱えて,実行時の効率もよいデータ構造+アルゴリズム - とくにあぶなくないRiSKのブログ arrayにpush_back, push_fonrt - bigsleepの日記 index_tuple の技法を使って,constexpr 関数の呼び出しを 2 回に抑える実装を考えました. #include <cstddef> // array // template <class T, std::size_t N> struct array { T elems[N ? N : 1]; constexpr T const &operator[](std::size_t i) const { return elems[i]; } }; // index_tuple // template <std::size_t ...Indexes> struct index_t
double は非型テンプレートパラメータに使えないので,そのコンパイル時計算は constexpr 関数に頼るのが一般的だと思いますが,テンプレートでもやってやれないことはありません. // 有名な階乗の計算を double で行います // Gamma function ではありません template <double const &d, bool Continue = (d > 0.9)> struct fact { static constexpr double prior = d - 1.0; // ローカル変数 static constexpr double value = d * fact<prior>::value; }; template <double const &d> struct fact<d, false> { static constexpr double v
はじめに Boost.Move は、C++0x で導入される move sematics を C++03 でエミュレートするべく、Ion Gaztanaga 氏 (Boost.Interprocess の作者) によって開発されたライブラリです。既に Boost 入りが決定しており、現在 trunk にあります。 この記事は、その使い方と実装を日本語で解説するために書かれました。C++0x の move semantics を大まかに理解している人を対象にしています。 参照 本の虫: rvalue reference 完全解説 【5日目】Boost.Moveが気になって - Flast?なにそれ、おいしいの? ムーブ可能なクラスを定義する クラスを move semantics に対応させるためには、Boost.Move の作法に則って定義しなければなりません。コピー可能かつムーブ可能なク
このページを最初にブックマークしてみませんか?
『iorate's blog』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く