読者です 読者をやめる 読者になる 読者になる

とくにあぶなくないRiSKのブログ

危ないRiSKのブログだったかもしれない。本当はRiSKだけどググラビリティとか取得できるIDの都合でsscriskも使ったり。

boost::overloaded_functionを使ったオーバーロードって素晴らしいですよね!

オーバーロードって素晴らしいですよね! - ぐるぐる~ このエントリでは、C#において オーバーロードがいらないは完全に言い過ぎですけど、オーバーロードを入れてしまったがために(後から導入した)関数との統一性がなくなってしまっています。 ということ…

Boost C++ Libraries Version 1.50.0 でた!

本家 →Boost C++ Libraries →Version 1.50.0 boostjp →Boost 1.50.0 リリースノート - boostjp

Boost C++ Libraries Version 1.49.0 出た

本家 →Boost C++ Libraries →Version 1.49.0 boostjp →Boost 1.49.0 リリースノート - boostjp

Boost.Algorithm を使ってみた (hex, unhex)

Boost.Algorithmが採択されました - Faith and Brave - C++で遊ぼう Boost.Algorithmが採択されたそうです。早速一部使ってみました。 どうやらC++11で追加されたアルゴリズムのフォローがメインのようですが,見慣れないアルゴリズム(?)の hex と unhex を…

Boost.勉強会 #7

先日,Boost.勉強会 #7 が開催されました。 Boost.勉強会 #7 東京 - boostjp 私は悲しい都合によりLive Streamすらまともに見れなかったのですが,今回も濃いお話がなされたようです。私がもっとも興味を持ったのはボレロさんのこれです。 中3女子でもわか…

Boost C++ Libraries Version 1.48.0 出た

本家 Boost C++ Libraries Version 1.48.0 boostjp Boost 1.48.0 リリースノート - boostjp

is_rvalue_reference のバグ(?)

次のコード,GCC では通るけど,VC++10 では static_assert に引っかかる。 #include <type_traits> static_assert(std::is_rvalue_reference<void (&&)()>::value == true, ""); int main(){} なんか VC++10 のバグっぽくないですか? 追記 なんと, VC++10 と Boost 1.47.0 の組合せ</void></type_traits>…

Boost C++ Libraries Version 1.47.0 でたよー

→Boost C++ Libraries →Version 1.47.0

Boost C++ Libraries Version 1.46.1 でました!

→Boost C++ Libraries →Version 1.46.1

Boost C++ Libraries Version 1.46.0 出ました

5日前の事なのでNewsじゃ無くなってますが,お知らせ。 →Boost C++ Libraries →Version 1.46.0

C標準ライブラリとBoostが出会ったら (2)

今回は前回の予告どおり,time_t を optional 化してみます。 // ライブラリ #include<ctime> #include<boost/optional/optional.hpp> namespace sscrisk{ boost::optional<std::time_t> time() { std::time_t const t = std::time(0); return t != static_cast<std::time_t>(-1) ? boost::make_optional(t) : boost::option</std::time_t></std::time_t></boost/optional/optional.hpp></ctime>…

C標準ライブラリとBoostが出会ったら

どうなるのか?というネタに挑戦。 今回は の struct tm あたりで遊んでみます。Boost を使うのでもちろんコードはC++です。 tm を lexical_cast して string を得られるように拡張してみます。 // ライブラリ #include<iosfwd> #include<ctime> #include<string> std::ostream& ope</string></ctime></iosfwd>…

Xpressive を使って #define を探し #undef を作る

→#define から #undef を生成する (2) - 危ないRiSKのブログ これの C++ 移植版です。 #include<iostream> #include<boost/xpressive/xpressive.hpp> void print_undef() { std::string line; if(std::getline(std::cin, line)) { print_undef(); auto const re = boost::xpressive::sregex::compile("</boost/xpressive/xpressive.hpp></iostream>…

Tokenizer を使って CSV をパースするサンプル

CSV 形式は正式な規格というものが存在しないらしいのですが,たいていの CSV ならパースできるであろうサンプルを書いてみました。 空要素 (,, のようにカンマが並ぶ) " ("a,c" のように囲む。\" のようにエスケープする) , (\, のようにエスケープする) \ …

Boost Version 1.44.0 きました!

→Boost C++ Libraries →Version 1.44.0

Boost 1.43.0 きましたー

→Boost C++ Libraries →Version 1.43.0

Boost Version 1.42.0 きました!

Release notes: Boost Version 1.42.0 Sorceforge: Browse Boost C++ Libraries Files on SourceForge.net

Concept Check Libraryを使おう (2)

boost 1.41.0 コンセプトチェックライブラリの iterator archetype classes の紹介。もといメモ。 以下のクラスはイテレータんのコンセプトを満たしているだけのクラスです。実際にはまともな仕事をしないダミーのクラスと言えます。 // boost/concept_arche…

番兵を持つイテレータアダプタ書いてる (1)

C言語の文字列の概念の一般化を目指してる。真のイテレータんになれるようにがんばってる途中。まだ問題あるだろうけど以下長いコード。 あ,そうそう,コンセプトチェック使ってみたよー! #include<iterator> template<typename Iterator, typename std::iterator_traits<Iterator>::value_type Sentinel = typename std::iterato</typename></iterator>…

Boost.勉強会でした

→Boost.勉強会 : ATND →Boost.勉強会 on USTREAM: Boost C++ Librariesの勉強会 http://atnd.org/events/1839. Conference 無事終了しました。 一番の収穫は id:DigitalGhost さんの一人称が「僕」だったことです。 もうまとめがあがっています。 →Boost.勉…

Concept Check Libraryを使おう (1)

→The Boost Concept Check Library (BCCL) なぜコンセプトチェックを使うのか 動機(モチベーション)から。 「自分が書いている関数テンプレートに変な型渡されたらどうしよう…。分かりやすいコンパイルエラーでてくれるかな…」 「関数テンプレートのデバッグ…

for しーぷらぷらー

→C++よりもC#でゲームを作るとよい8の理由と、悪いほうの8つの理由 - 【長剣は】最強武器候補【鈍器です】 追記:元記事をきっかけとして,C++ でどこまでできるか私が知っている範囲で紹介しているエントリです。言語・ライブラリの良し悪しとか,ゲーム作…

lexical_cast, counting_iterator を使って FizzBuzz

#include<string> #include<boost/lexical_cast.hpp> #include<boost/iterator/counting_iterator.hpp> #include<iterator> #include<iostream> #include<algorithm> template<typename T> std::string FizzBuzz(T n) { if(!(n % 15))return "FizzBuzz"; if(!(n % 5))return "Buzz"; if(!(n % 3))return "Fizz"; return boo…</typename></algorithm></iostream></iterator></boost/iterator/counting_iterator.hpp></boost/lexical_cast.hpp></string>

Version 1.41.0 きました!

→Version 1.41.0

みんなでたしざん

みんなでたしざん。みんななかよし。*1 /* 1: C/C++ */ int add(int x, int y) { return x + y; } // 2: C++ template<typename T> T Add(T x, T y) { return x + y; } // 3: C++ template<int x, int y> struct ADD{ enum{ value = x + y }; }; // 4: C++ #include<functional> // 5: C++ #include<boost/lambda/lambda.hpp></boost/lambda/lambda.hpp></functional></int></typename>…

宿題丸づかみ。BOOST_PP_MUL とか

→C言語のプログラムの問題です。 3*4を計算し、結果をanswer=の後に出力するプログラムを作る。 #include <[ ]> void main() { int s=3*4 ; [ ]("answer=%d\n",[ ]); } [ ]の中を教えてください。 よろしくお願いします。 問題がアレ…。 /* C */ #include<stdio.h> i</stdio.h>…

BOOST_PP_IS_EMPTY(x)

アンドキュメントをアンオフィシャルにドキュメント化。 インクルード #include<boost/preprocessor/facilities/is_empty.hpp> BOOST_PP_IS_EMPTY(x) x を展開した結果が空か調べます。 型 any → bool x 戻り値 x を展開した結果が空であれば 1 を返します。 例えば #define x のように x が空になるよう</boost/preprocessor/facilities/is_empty.hpp>…

マクロ定義の有無を調べる

注:引用時に整形を加えました。また,codepad.org へ張ったコードを修正したコードをこのエントリに載せました。 問題 →Twitter / Faith and Brave: プリプロセスでこういうことしたいんだけど、どうにかな ... プリプロセスでこういうことしたいんだけど、…

1から10までの自然数の合計を出すプログラムをプリプロセッサを使って書きなさい

→ベンチャー社長で技術者で: 「転職活動する暇があったらブログを書け」について 弊社の入社試験に、「1から10までの自然数の合計を出すプログラムを書きなさい」というのがあるのですが、ほとんどの人はループで書けていた。足し算だからかな?ちなみに、も…

boost::algorithm::trim, trim_left, trim_copyとか

→2009-07-17 - エンジニアのソフトウェア的愛情 「strip」という名前のほうが一般的なのかな?わたしはDelphi育ちなもので。 Boostではtrimが使われているようです。 →Reference というわけで,覚えたてのコード。 #include<string> #include<boost/algorithm/string/trim.hpp> int main(){ std::string</boost/algorithm/string/trim.hpp></string>…

tokenizer, ユーザー定義のseparator

brainfuck のトークンをトークナイズ。 operator()の中で同じ条件二回書いててダサすぎる…。 #include<string> #include<boost/tokenizer.hpp> struct brainfuck_token_separator{ void reset(){} template<typename Iterator,typename Token> bool operator()(Iterator&next,Iterator end,Token&t){ if(next==end)return fal</typename></boost/tokenizer.hpp></string>…

tokenizer, escaped_list_separator

#include<string> #include<boost/tokenizer.hpp> int main(){ std::string s="a, b\\, c, \"d,\" e, \\\", f"; boost::escaped_list_separator<char>e; boost::tokenizer<boost::escaped_list_separator<char> >t(s,e); for(boost::tokenizer<boost::escaped_list_separator<char> >::iterator i=t.begin(); i!=t.end();++…</boost::escaped_list_separator<char></boost::escaped_list_separator<char></char></boost/tokenizer.hpp></string>

tokenizer, char_separator

C++よくわかんないでコード書いてるから解説は不可能。 #include<string> #include<boost/tokenizer.hpp> int main(){ std::string s="No more bottles of beer on the wall, no more bottles of beer.\n" "Go\tto the store and buy some more, 99 bottles of beer on the wall."; boost:</boost/tokenizer.hpp></string>…