春合宿講座でリテラル文字列型を作ったという話をしたということはおそらく皆さん知っているであろう。それに関連してC++11対応のconstexprライブラリを作ってみようという企画である。といっても私ができることなどたかがしれてるのでとりあえず作れそうなものから作っていこうって話。
とりあえず作ってみようと思ったのは以下のファイル。
tuple.hpp
コンパイル時に使えるタプル型
array.hpp
コンパイル時静的配列ラッパー
algorithm.hpp
constexprで定義されたfor_eachとかsortとかmatch_numとか
string.hpp
リテラル文字列型
math.hpp
constexpr算術関数
とりあえずと言ってもやはり先は長い。ていうか普通に難しい。
やっとこさtupleの最低限の機能を実装したのでアップロダに上げた。一応static_assertでコンパイル時にconstexpr定数版と右辺値版のgetが使えることは確認したがどこにバグがあるかわからないのではい、て感じ。コメント下さい。はい。
アップロダはブログの→から。githubの使い方がわからなかったとかいう言い訳。
一応リファレンス
namespaceはdcl
utility.hpp
standard include(utility cstddef type_traits)
using nullptr_t = decltype(nullptr)
using size_t = unsigned int
enable_if //std::enable_ifと同じ(実装の簡単のため)
conditional //std::conditonalと同じ
template<class Ty1,class Ty0>class pair //型の違う2変数を保持するクラス
template<size_t S>(Ty0 or Ty1) get(pair<Ty0,Ty1>) //pairの中身を参照返しする(const左辺値、左辺値、右辺値版がそれぞれある)
tuple.hpp
template<class... Ts>class tuple //リテラル型tuple
get<I>(tuple<Ts...>)//tupleの中身を参照返しする
template<size_t I,class T>class tuple_element//tupleのI番目の型をusingエイリアスでtypeにする
template<class T>class tuple_size//tupleの要素数をstatic constexpr size_tなメンバvalueに持つ
もうちょっと機能追加しようかなぁ(2つのtupleを結合して新たなtupleを作るとか)
PR