2011-08-01から1ヶ月間の記事一覧

C++0x でスリープソート

C++

某 KUIS の院試でスリープソートが出題されたらしいので,以前話題になったときに書きかけてそのままにしていた C++0x での実装を晒しておきます. まず sleep.cpp がこちら. constexpr int f(int x, int y, int n) { return y == 0 ? 0 : f(x * 2, y - 1, …

Phoenix で variant を返す条件演算子

Boost.Phoenix の if で戻り値を返す - C++でゲームプログラミング Phoenix の if_else は then 節と else 節の common_type を返しますが,それらの型が異なる場合は variant に収めて返すという戦略もあるでしょう.Phoenix ではそのような条件演算子もユ…

MPL でカリー化

curryN<F> で,N-ary なメタ関数クラス F をカリー化します. #ifndef CURRY_HPP #define CURRY_HPP #include <boost/mpl/bind.hpp> #include <boost/mpl/placeholders.hpp> #include <boost/mpl/protect.hpp> #include <boost/preprocessor/arithmetic/dec.hpp> #include <boost/preprocessor/cat.hpp> #include </boost/preprocessor/cat.hpp></boost/preprocessor/arithmetic/dec.hpp></boost/mpl/protect.hpp></boost/mpl/placeholders.hpp></boost/mpl/bind.hpp></f>

Variadic template template parameters に関して,ちょっとした疑問

C++

次のコードは gcc 4.6.0 と clang 2.9 でコンパイルの通るものです. template <class T = void> struct A {}; template <template <class ...> class U> struct B { U<> a; }; B<A> b; B<A> のインスタンス化中は U = A となっているわけですが,U<> が通るということは,U には A のデフォルト引数が使</a></a></template></class>…