BoostCon 2011でのJoel Falcou, Mathias Gaunardによる発表「Practical SIMD acceleration with Boost.SIMD」の日本語訳。

参考 Chapter 27. Boost.Variant - 1.42.0 letsboost::variant Boost.Variant の assign の処理 - melpon日記 - HaskellもC++もまともに扱えないへたれのページ Tiny Template Library multi-type, single value. 1つの変数で複数の型を扱いたい場合、C言語ではunionを使用しますが、 C++ unionでは、std::stringを扱うことが出来ません。 union { int a; double b; std::string c; //illegal: std::string is not a POD type! }; C++でunion的なものを使いたい場合、Boost.Variantが便利です。 boost::variant< int, double,
Not your computer? Use a private browsing window to sign in. Learn more about using Guest mode
最近のboost C++ライブラリは数値計算や幾何計算のほうも充実してきているようで、先日Boost.Geometryの2Dブーリアンを使ってみたらそのパフォーマンスと頑強性に驚かされた。 さらにこのBoost.Geometryは設計が素晴らしい。そのDesign Ratonaleを読んでみたところとても面白かったので、より多くの人に読んでもらいたいなと思って和訳してみた。 わかりやすい題材を元に、traits, タグディスパッチ、コンセプト、メタ関数などのテンプレート周りの独特の技法が少しずつ登場してくるので、これらの概要を把握するにもとても良い資料だと思う。 原文はココ。 なお、「ジェネリック」、「特殊化」といったジェネリックプログラミング独特の用語が頻出するので、なじみのない方は あらかじめここで概要をつかむといいかもしれない。 設計の理論的基礎(Design Rationale)
先週名古屋にてBoost.勉強会#5が開催されました. それとは直接関係ないのですが,行きの電車の中でBoost.Variantの仕様に関して疑問をもってTwitterでつぶやいたところ@cpp_akiraさんより回答をいただいて,それがすごく興味深い内容だったのでそのやりとりをこちらでメモ. [blackbirdpie url=”http://twitter.com/mrxptn/status/69203406492942336″] [blackbirdpie url=”http://twitter.com/cpp_akira/status/69203912112087040″] ん?template限定子って何だ…? ということでググります. @cpp_akiraさんのブログが最初に出てきました. http://d.hatena.ne.jp/faith_and_brave/200801
かなり面白かったので書いてみます。 代入する型が一致する場合 まずは小手調べ。簡単に代入できる場合までの処理。 Boost 1.40.0 では以下の実装になっています。 void variant_assign(const variant& rhs) { if (which_ == rhs.which_) { detail::variant::assign_storage visitor(rhs.storage_.address()); this->internal_apply_visitor(visitor); } else { assigner visitor(*this, rhs.which()); rhs.internal_apply_visitor(visitor); } } template <typename T> void assign(const T& rhs) { det
Boost.Spirit.PhoenixにRangeアルゴリズムがありました。 http://www.boost.org/doc/libs/1_42_0/libs/spirit/phoenix/doc/html/phoenix/algorithm.html しかし、使ってみたら for_each(v, [](int x) { std::cout << x << std::endl; }); と書いても何も起こらず。 findしてみたら std::vector<int>::const_iterator it = find(v, 2); 型が違うと怒られ。 なんだこりゃと思って調べたら、こんな感じで使うようです。 #include <iostream> #include <vector> #include <list> #include <boost/spirit/home/phoenix/c
#include <boost/spirit/home/phoenix/core.hpp> #include <boost/spirit/home/phoenix/operator.hpp> #include <boost/spirit/home/phoenix/scope.hpp> #include <boost/spirit/home/phoenix/bind.hpp> #include <boost/spirit/home/phoenix/function.hpp> #include <boost/spirit/home/phoenix/statement.hpp> #include <string> #include <iostream> #include <boost/ref.hpp> #include <boost/lexical_cast.hpp> namespace bst
Boost.Mathにある円周率を求める関数boost::math::constants::pi()ですが、単に定数を型Tにキャストして返すだけの実装だと思っていたら、実は違ったようです。定数で表現できる以上の桁数を要求された場合は、「ldexp(acos(T(0)), 1)」で計算するようになっていました(boost/math/constants/caluculate_constants.hpp)。 まず、組み込みの浮動小数点数型。これは単に定数が返されます。 #include <iostream> #include <boost/math/constants/constants.hpp> #include <boost/multiprecision/cpp_dec_float.hpp> namespace mp = boost::multiprecision; using boost:
コンテナに複数のインデックスを持てる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
N3509 Operator Bool for Ranges std::vector、std::stringといったコンテナクラスに、operator boolを持たせよう、という提案。 これがあると、!empty()を必要とする状況でプログラムの冗長性を解消できる、というのが動機です。 // 従来の方法 string s = f(); if (!s.empty()) { // sを使った処理 } // operator boolがある場合 if (string s = f()) { // sを使った処理 } こういう書き方は、Boost.Optionalでよく使います。文字列だと、1行ずつのファイル読み込み処理などで使えると思います。 boolへの変換演算子は、Boost.Rangeのiterator_rangeではすでに提供されています。
boost::range RangeConcept problem. 先日Boost User MLで質問が出ていたので回答したのですが、その詳細をこちらで書きます。 関数の部分適用を行うboost::bind()は、関数ポインタ、関数オブジェクト、メンバ関数ポインタに対して適用できますが、メンバ関数ポインタ版の場合、bind()の結果として返される関数オブジェクトは、デフォルト構築できません。 #include <boost/bind.hpp> struct X { int f(int x) const { return x; } }; template <class F> void function_check(F f) { F x; // コンパイルエラー!デフォルト構築できない } int main() { function_check(boost::bind(&X::f, _1,
ゲームプログラミングにおける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: 17日目の記事になります。 お題は「Google Test ユーザーが Boost.Test を使ってみた」です。 (2012/12/27: 補足記事を書きました。) これまで、C++ の testing framework には Google Test を使ってきたのですが、 この機会に Boost.Test に挑戦したいと思います。 今年2月に行われた「Boost.勉強会 #8 大阪」の参加報告で Boost.Test 使うぜ!っと意気込んでおいて今更かという感じではありますが・・・ では、なぜ今まで使わなかったのかというと boost の導入がめんどくさそう 日本語情報が少ない Google Test が使いやすかった と、いう勝手なイメージがあったからです。最後のが一番大きな理由でした。 でも、他のフレームワークのこと
Not your computer? Use a private browsing window to sign in. Learn more about using Guest mode
cppmix.connpass.com 2025/07/18(金)に開催します。 これまで2ヶ月ごとの開催でしたが、3ヶ月ごとに変更になっています。 cppmix.connpass.com 次回のC++ MIXは2025/04/25(金) 19:00〜21:00に開催します。発表、ご参加お待ちしております。 cppmix.connpass.com 次回のC++ MIXは、2025/02/21(金) 19:00-21:00に開催します。 発表、ご参加お待ちしております。 www.boost.org boostjp.github.io Boost 1.87.0がリリースされました。 リリースノートはいつものように日本語訳したものをboostjpサイトで公開しています。 cppmix.connpass.com 2024年12月20日 (金) に、C++ MIX #12 を開催します。 会場都合で
動機: C++ で Haskell の Either っぽい何かを作ってみた。 - 野良C++erの雑記帳 せっかく Either 作ったんだから Maybe モナドも作ろうぜ、という話。 まず Boost には、既に Maybe に相当する Boost.Optional が存在するので、 そいつをモナドの >>= に対応させてやればよい、 という考え方が最もストレートなものであり、 実際、そういう方針で書かれたコードは既に存在してたりします。 (例: C++でMaybeモナド - Faith and Brave - C++で遊ぼう) そこで、少し発想を変えてみることにしました。 まず、 Haskell のモナドを、そのまま C++ に持ち込むのは、やはりキモいです。 C++ には暗黙の型変換という文化があるので、その恩恵をフルに活用出来ないか。 また、 C++ における Maybe 相当
動機: boost::optionalだけじゃなくboost::eitherがほしい - Faith and Brave - C++で遊ぼう Boost.Optional は C++ でも屈指の便利ライブラリですが、 「戻り値として使う」場合には、時々「失敗した」という状況の他に、失敗した状況を示すような値が返せると嬉しい場合があります。 つまり、関数本来の戻り値の代わりに、それとは別の型でエラー情報を返すことも出来る、 要するに Haskell で言うところの Either a b があるといい、ということです。 これを C++ で実現するためには、一見して Boost の Variant を使うことで boost::variant<string, double> sqrt_either( double x ) { if( x < 0 ){ return "negative number
👻 道化師 🃏 @wraith13 次の( )に当てはまる適切な言葉を述べよ。(10点):「(std::)tie が( )していてよ。」 [電波注意] 2010-04-28 00:43:41
boost::optional は「値 T あるいは無効値」を取ることのできるクラスです。 通常このクラスは、「失敗するかもしれない」関数の戻り値として使用されます: #include <boost/optional.hpp> #include <iostream> // 例として std::getline を optional で実装してみる boost::optional<std::string> getline_optional( std::istream& in ) { std::string result; if( getline( in, result ) ) { // 行の読み取りに成功 return result; } // 失敗。無効値( boost::none )を返す return boost::none; } int main() { // cat コマンドっぽい挙
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く