Entries from 2010-09-01 to 1 month

セッションの遅延ロードの罠

これも rails バージョン 2.3.8 の話です。セッションには遅延ロードの仕組みがありますが、SessionHash#has_key? などの一部のメンバの実装は、Hash#has_key? の実装と変わらないので、そのまま使うとちょっとまずいです。適切に SessionHash#has_key? をオ…

ActiveRecord::SessionStore を利用している場合に reset_session した後で session_id を取得する

たまには仕事の話をします。rails バージョン 2.3.8 での話。通常 reset_session してしまうと、そのセッションの id は失われてしまいます。reset_session 後にセッションの id を取得したい場合には、request.session_options[:id] に自前で id を発行する…

opaque enum declaration

gcc のメーリングリストに、enum の前方宣言に関するパッチが、未完成ながらも投げられています。簡単そうなので enum class と一緒に実装されててもいいのに、と思っていたんですが、割合面倒なようです。gcc の現在のツリー構造では「まだ enumrator list …

accumulator generator in C++0x

accumulator generator というものがあります。暇つぶしに C++0x で書いてみました。 #include <memory> #include <functional> template <typename Num> auto accgen(Num n) -> std::function<auto (Num) -> Num> { auto np = std::make_shared<Num>(n); return [np](Num i) -> Num { return (*np) += i; }; } ラ</num></auto></typename></functional></memory>…

range-based for の declaration と expression の可視性について

先週、ようやく range-based for が gcc-4.6 に実装されました。めでたい。さて range-based for ですが、規格によると for ( for-range-declaration : expression ) statement と { auto && __range = ( expression ); for ( auto __begin = begin-expr, __…

map 色々

http://ls-al.jp/blog2/?itemid=3477 より。色んな map を書いてみます。 template <typename F, typename A> std::vector<typename std::result_of<F(A)>::type> map(const F& f, const std::vector<A> &v) { std::vector<typename std::result_of<F(A)>::type> r; for(auto it = v.begin(); it != v.end(); it++) r.push_back(f(*it)); …</typename></a></typename></typename>

C++0x のお話を

ちょっとずつ書こうかなと思います。誰も書いてくれやしない…とグズっていても仕方ないことに気がついてしまいました。悲しいね… 勿論ボクも全然知らないことだらけなので、調べながら少しずつ、になってしまうとは思いますが、ぼちぼちやってみようと思いま…

プログラミングの魔導書を読みました

C++

プログラミングの魔導書を読みました。面白かったところだけ、軽く感想など書いてみます。Hello, C++ World! は kinaba さんのこの話がよりまとまったもの。本が出る前にちらっと内容は伺っていたんですが、矢張り面白かったです。たまに思うんですが kinaba…

一時的にメソッドをすり替える

メタプログラミング ruby を読みました。よくまとまっていて、いい本だなあと思いました。 個人的にはあんまり ruby で実行時にメソッドやクラス、モジュールを操作することはメタじゃないと思っているんですが…それはうさつのとして…折角なのでメタっぽい話…

はんぶんこしよう

FCD によると、C++0x では少なくとも 1024 回の再帰的なテンプレートの実体化が保証されることになっています。 1024 回というのは、通常は十分に大きく問題のない数字なのですが、メタプログラミングな気分の時には、ちょっと少ないカナ?という気持ちに、…