2008-03-01から1ヶ月間の記事一覧

コンパイル時リスト処理

c++

前回の日記からコード整理してみました。 ソースはこちら前のコードだと二重mapが実現できなかった(というか実現するためにmapの中身をそのたびに書き換えないといけなかった)んですが、こちらの「テンプレート引数にクラステンプレートを渡す話」みてできそ…

テンプレートを使ったコンパイル時数値計算

c++

#include <iostream> #include <typeinfo> template <typename T, int length> struct array { typedef T element_type; element_type elements[length]; element_type& operator[](int offset) { return elements[offset]; } const element_type& operator[](int offset) const { return elements[offset</typename></typeinfo></iostream>…

バイトオーダ反転、ビットオーダ反転

c++

#include <iostream> template <int value_, typename T = int, int size = sizeof(T)> struct byte_order_reverser { enum { msb = (value_ >> ((size - 1) * 8)), other = (value_ - (msb << ((size - 1) * 8))), reverse_value = (byte_order_reverser<other, T, size-1>::reverse_value << 8) + byte_order_reverser</other,></int></iostream>