Boost.GraphでJR全線乗り尽くしプランを立てる - プログラミング生放送+CLR/H+Sapporo.cpp 勉強会@札幌 (2014.7.12)
Boost.GraphでJR全線乗り尽くしプランを立てる - プログラミング生放送+CLR/H+Sapporo.cpp 勉強会@札幌 (2014.7.12)
Andrei Alexandrescuが考案したExpected<T>というクラスを、いまBoostとC++標準に提案する動きがあります。 Vicente Botet EscribaさんとPierre Talbotさんが現在開発を進めているexpectedクラスは、エラー値と正常値を汎用的に表す型です。boost::optionalやboost::variantの亜種で、HaskellやScalaにあるEitherをエラーに特化させたものです。Haskell的にはMonadErrorに相当するそうです。私も以前、似たようなのを書きました:「エラー許容型を作った」。 ゼロ割りを適切にハンドリングする、安全な割り算関数に例外を使うと、以下のようなコードになります: struct DivideByZero: public std::exception { … }; double safe_div
6. 話さないこと • • • std::rand() 数学的な詳細 エンジンアダプタ • discard_block_engine(Boost, C++11) • shuffle_order_engine(Boost, C++11) • independent_bits_engine(Boost, C++11) • addive_combine_engine(Boost) • xor_combine(Boost) 8. 基本的な使い方 • 以下は、メルセンヌ・ツイスター擬似乱数生成器と一様整数分布を使用し て、[0, 3](0以上3以下、と読む)の値を等確率で分布させる処理。 using namespace boost::random; random_device seed_gen; mt19937 engine(seed_gen()); uniform_int_distribution
さて、Ruby の || 演算子は次のような挙動になります。 n1 = 42 || 12 puts n1 # => 42 n2 = false || 12 puts n2 # => 12 n3 = 42 || false puts n3 # => 42 このように Ruby の || 演算子は最初に真になった値を返します。 これを Boost.Optional を使って C++ でも行なってみました。 [ソース] #include <iostream> #include <boost/optional/optional.hpp> #include <boost/optional/optional_io.hpp> template<typename T> boost::optional<T> operator ||(boost::optional<T> a, boost::optional<
2013年のBoostのGoogle Summer of Codeプロジェクトを眺めていたら、こんなのがありました。 Boost.Chrono/Date Complete the Boost.ChronoDate [1] library based on [2] to make it ready for review. [1] https://svn.boost.org/svn/boost/sandbox/chrono_date/ [2] https://svn.boost.org/svn/boost/sandbox/chrono_date/libs/date/doc/date.html This project will be mentored by Vicente J. Botet Escriba 今まで時間のみを扱っていたBoost.Chronoですが、日付を扱うプロジェクトが進めら
コンテナに複数のインデックスを持てるBoost.MultiIndexですが、単一のインデックスだけを持たせるだけでも便利に使えます。ここでは、std::setを置き換えて使ってみます。 std::setにユーザー定義型を格納する場合、キーの比較を自分で定義する必要があります。そしてその比較が一部のメンバ変数だけで完結する場合、std::setでは比較に必要なメンバ変数以外に、ダミーの値を入れたオブジェクトを作る必要があります。 #include <iostream> #include <set> struct X { int a = 0; int b = 0; int c = 0; X(int a, int b, int c) : a(a), b(b), c(c) {} }; struct XLess { bool operator()(const X& x, const X& y) co
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 = 1; int_type second = 1; for(int i = 0 ; i < 200 ; ++i){ int_type third = first + second; first = second; second = third; std::cout << third << std::endl; } return 0;
Boost 1.53.0時点のロックフリーキューは、要素型Tがtrivially copyable(memcpy可能な型)であることを要求します。そのため、ユーザー定義型の多くはロックフリーキューに格納できません。 #include <boost/lockfree/queue.hpp> int main() { boost::lockfree::queue<std::string> que(3); // エラー! } In file included from main.cpp:3:0: boost_1_53_0/boost/lockfree/queue.hpp: In instantiation of 'class boost::lockfree::queue<std::basic_string<char> >': main.cpp:7:41: required from here bo
Boost 1.53.0には、Boost.Lockfreeという並行コンテナのライブラリが入りました。 このライブラリにはスタックとキューが用意されていますが、よく使うのはキューの方でしょう。 使い方は以下のようになります。 #include <iostream> #include <thread> #include <boost/lockfree/queue.hpp> boost::lockfree::queue<int> que(128); void producer() { for (int i = 0;; ++i) { while (!que.push(i)) {} } } void consumer() { for (;;) { int x = 0; if (que.pop(x)) { std::cout << x << std::endl; } } } int main() {
部分文字列に対する操作で、以下のような処理をよく書くと思います。 #include <string> std::string extract_part(const std::string& str) { return str.substr(2, 3); } int main() { if (extract_part("ABCDEFG").front() == 'C') { ... } } std::stringのメンバ関数を使いたいからchar配列からstd::stringに変換し、部分文字列を得るためにsubstr()メンバ関数を使っています。 しかしそのためにstd::stringの一時オブジェクトができてしまうので、効率はよくありません。 Boost 1.53.0から、このような場合に使用するstring_refというクラスが導入されました。これは以下のように使用します。 #incl
ゲームプログラミングにおけるC++の都市伝説 † この記事は、C++ Advent Calendar 2012 22日目の記事です。 Prev 21日目の記事 CEANによる配列操作 Next 23日目の記事 構造化並列プログラミング 時間の関係で3つの都市伝説しかご紹介できませんでしたが、またの機会があれば他の都市伝説についてもお話したいと思います。 2012/12/22 written by h.godai @hgodai 目次 初めに 都市伝説1 C++は遅いのでゲームには向いていない 都市伝説2 boost::poolはゲームには向いていない 都市伝説3 boostライブラリは怪しいライブラリだ。使うと呪われる。 ↑ 初めに † かつて、8bit時代はゲームのプログラムはアセンブラが主流でした。やがて、ゲームのプラットフォームが16bitから32bitになるに従い、C言語でゲームが
この記事はC++ Advent Calendar 2012 12日目の記事です。 Boost.Asio、みなさんもお使いのことと存じますが、あれこのソケットなかったっけ? とかこれもAsioで使いたいなぁと思ったことはありませんか? そんな時のためにこの記事ではBoost.AsioのProtocol, socket option, serviceの拡張を扱います。 基礎知識: I/O service: ご存知boost::asio::io_service I/O object: 実際にAsioを使う人が触るobject。socketやtimerなど。(例: boost::asio::tcp::socket, boost::asio::deadline_timer等) Service: boost::asio::io_service::serviceを継承しI/O serviceに登録される
この記事は、C++ Advent Calendar 2012: 17日目の記事になります。 お題は「Google Test ユーザーが Boost.Test を使ってみた」です。 (2012/12/27: 補足記事を書きました。) これまで、C++ の testing framework には Google Test を使ってきたのですが、 この機会に Boost.Test に挑戦したいと思います。 今年2月に行われた「Boost.勉強会 #8 大阪」の参加報告で Boost.Test 使うぜ!っと意気込んでおいて今更かという感じではありますが・・・ では、なぜ今まで使わなかったのかというと boost の導入がめんどくさそう 日本語情報が少ない Google Test が使いやすかった と、いう勝手なイメージがあったからです。最後のが一番大きな理由でした。 でも、他のフレームワークのこと
C++ Advent Calendar 2012 - PARTAKE の9日目です。 今回は Boost.Asio で Graceful Restart してみたいと思います。 ※Unix依存コードなのでWindows環境はわからないです。あしからず。まぁWinで鯖とか... Graceful Restart とは Graceful(ぐれーすふる, 優雅な) Restart とはサーバーアプリケーションなどで稀に実装されることがあるdaemonの再起動方法です。有名所だと Apache httpd なんかは実装しています。停止と再起動 - Apache HTTP サーバ 手順 通常の Restart の場合、 旧プロセスがシグナル等を受け取る 直ちに全てのセッションをぶった切る 旧プロセスが停止 新プロセスが1から立ち上がる という手順を踏みます。その瞬間にどれだけのクライアントが接続しよ
Review results for Coroutines コルーチンライブラリであるBoost.Coroutineが採択されました。 ドキュメントは以下になります: http://ok73.ok.funpic.de/boost/libs/coroutine/doc/html/ 以下レビュー結果の翻訳です。 == Oliver Kowalkeによって書かれたCoroutineライブラリに対して、2012/9/3から2012/9/12までの期間でレビューが行われた。7票の賛成票が提出され、いくつかの追加機能のリクエストが行われた。全体として、コミュニティの決定が明確になった: 「Oliver KowalkeのCoroutineライブラリを採択する」 盛んに行われた議論は、以下のポイントに触れた。 設計 Coroutineライブラリは、コミュニケーションソフトウェアと組み込みソフトウェアの設計
その1の続きです。 宣言と実装の分離 基本構文はだいたい押さえましたね。しかし、実際に使うとなると大事なことを忘れています。 このまま行くと「あれ?そういえば宣言と実装分けられないのかな?」となるのは確実です。 Boost.Contractではそれが可能です。自分で書くと結構たいへんだったのでTutorialのを引用しちゃいました。 // body_natural.hpp // Copyright (C) 2008-2012 Lorenzo Caminiti // Distributed under the Boost Software License, Version 1.0 // (see accompanying file LICENSE_1_0.txt or a copy at // http://www.boost.org/LICENSE_1_0.txt) // Home at
これは C++ Advent Calender 2012 の3日目の記事です。 ーBoost.Contract 0.4.1が最新です。(2012/12/03現在) はい、契約だからってま○どマギネタとか出てくるんじゃないかなーって期待していたそこのアナタ!残念ながら使い回されすぎて使いにくいため、そういったものは出てきませんのであしからず。 Introduction 今回は、今年9月頃に採択されたBoost.Contractについてご紹介します。 そもそもContract Programming(Design by Contract - DbC)は、はじめEiffel,Spec#など*1で取り入れられていたものです。契約プログラミングの大体の説明はWikipediaに任せるとして、それをC++ではどうかけるのか、これからまとめていきたいと思います。 Boost.ContractのTutor
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く