C++0x

Boost.勉強会 #4

無闇にでかいというだけであまり好きでなくなってきた Boost ですが(というか、「Boost が」好きだったことがあっただろうか?)、勉強会がありました。それで発表したらしいです。適当ですがプレゼンおいときます。https://docs.google.com/present/edit?i…

COMFRK vol2

http://ratiwo.blogspot.com/2010/12/comfrk-vol-2.htmlvol1 に引き続き、何か書きました。C++0x のムーブセマンティクスに関してです。基本的なモチベーションであるとか、そもそも参照って何?右辺値って何?みたいなレベルの話から、コピー、ムーブの可否…

循環参照と所有権の共有

循環参照というと C++ では下のようなコードのことを指すわけですが、 struct A { shared_ptr<B> bp; }; struct B { shared_ptr<A> ap; }; shared_ptr<A> ap(new A()); shared_ptr<B> bp(new B()); ap->bp = bp; bp->ap = ap; これに対する解決として weak_ptr を使うと</b></a></a></b>…

循環参照と所有権の共有訂正

なんか完全に間違えてました。本来は既に管理しているオブジェクトの一部をさす時に使うためのものなので、カスタムデリータが必要なんでした。 struct B; struct A { weak_ptr<B> b; }; struct B { weak_ptr<A> a; }; struct Deleter { Deleter(B* b) : b(b) { } </a></b>…

C++ プログラマのための C++0x 入門

これは C++ advent calendar の参加記事です。真面目な C++0x の紹介や入門は 25 日もあれば誰かが書いてくれると思うので、C++0x について何も知らなくてもすぐに分かる、ちょっとだけ幸せになれるかもしれない極めて些細な tips を書きます。後に変態記事…

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 のお話を

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

はんぶんこしよう

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

寄稿しました

とりあえず原稿が形になったの宣伝です。 コミックマーケット 75 で出るらしい謎の雑誌 COMFRK vol.1 に寄稿しました。http://ratiwo.blogspot.com/2010/08/comfrk-vol-1.html内容は C++0x の言語機能 Variadic Templates のお話です。 単なる紹介だけではな…

こわいはなし

template <typename ...Args> void f(Args... args){ [args...](){ }(); } g++-4.5 -std=c++0x に投げ込むと capture_pack.cpp: In function ‘void f(Args ...)’: capture_pack.cpp:3:8: error: expected ‘,’ before ‘...’ token capture_pack.cpp:3:8: error: expected identi</typename>…

それ pack expansion でできるよ。

#include <tuple> #include <functional> // for result_of template <int ...Indexes> struct IndexTuple { typedef IndexTuple<Indexes..., sizeof...(Indexes)> next; }; template <size_t N> struct BuildIndexTuple { typedef typename BuildIndexTuple<N - 1>::type::next type; }; template <> struct BuildIndexTup…</n></size_t></indexes...,></int></functional></tuple>

C++0x の std::pair

C++0x では std::pair が狂信的な速度狂や偏屈な例外安全性狂信者のため、もとい、より安全で高速なソフトウェアのために、便利になりました。

(略)を問い詰める会と curry

もう先週になってしまうのですが C++WG 会議の後に行われた「(略)を問い詰める会」に参加してきました。 結構な人数が参加されていたのですが、半分くらいの方としかお話できなかったんじゃないかなあ…少し残念でした。id:rti7743 さんが途中「カリー化っ…