2013-01-01から1年間の記事一覧

Generic Lambdas で has_xxx を実装する

C++

has_xxx とは型 x にネストされた名前 name があるかどうか調べるメタ関数の総称です。名前空間またはクラスのスコープでクラステンプレート has_name を定義し、その上で has_name<x>::value などとして使います。 本の虫: C++11におけるモダンなhas_xxxの実装</x>…

Boost.Asioでio_service::run()を包含する設計

C++

Boost.Asio io_serviceを包含する設計 - Faith and Brave - C++で遊ぼう 上の話に加えて、io_service::run()を誰が呼ぶかという話についてのメモ。 1つは上で紹介されているように、io_serviceを公開し、ユーザーにrun()させるパターン。 class client { pub…

Boost.Asioで非同期操作中に*thisの寿命が尽きることを防ぐ

C++

Boost.Asioを使って非同期操作を書いていると、メンバ関数から起動した非同期操作の最中に*thisの寿命が尽きて困ることがあります。 例えば次のHTTPクライアント: class http_client { public: // ... void start() { // ... // 名前解決を開始する m_resolv…

C++/Boostでオブジェクトへのアクセスを同期する方法メモ

C++

C++で、複数のスレッドから1つのオブジェクトにアクセスするときに同期をとる方法いろいろ。 1. atomicを使う 使える型は限られるが、お手軽。 std::atomic<int> x(0); boost::thread_group threads; for (int i = 0; i < 4; ++i) { threads.create_thread([&] { </int>…