Using strings in C++ template metaprograms という記事を見つけた.
基本は「定数配列の定数要素アクセスは定数である」という仕様を使うのね.長さの違う文字列に効率的に対応するために,最長文字列長を決めといて,その文字列長に対応するマクロをプリプロセッサの繰り返しで作っておいて,短い奴に対応するために要素アクセスを constexpr な関数で条件付きにしてあると.
うーん.長さ制限をなくせる手法があると完璧なのだけど,無理かね.文字列リテラルの文字列長はコンパイル時には取れるけれどプリプロセスの時点では取れないか.
閑話休題.
constexpr な関数が普通の関数としてコンパイルできること,とかいう条件が邪魔だな…… コレのせいで constexpr な関数の引数をテンプレート引数に入れることができない.例えその関数が常に定数に対してしか使われないとしても.
定数に対してしか使えない関数を定義できる枠組みがあると便利そうだけどコンパイラが大変そうだなぁ.
- Newer: AWK - はじめ