ゆとりーなの日記

日記的な事を書いて行くと思はれる

構造体自動生成

Direct3Dで使う頂点構造体を自動生成しようとBoost.PPを使ってみました。

template <std::uint32_t FVF>
struct vertex {
  BOOST_PP_SEQ_FOR_EACH(ごにょごにょ)
};

BOOST_PP_SEQ_FOR_EACHでメンバ展開、テンプレート引数の値を使ってシーケンスを走査とか思ったんですが、よく考えたらC++の原理的にこれ無理ですね。
仕方がないのでFVFを定義したマクロを使おうと思ったんですが、肝心なBOOST_PP_BITANDとかが定数をそのままぶちこまないと作用しないことを思い出しました。値直打ちをやってもいいんですがそれだと何だか変更に弱い気もしますし無理して自動生成しなくてもいいのかなと思いつつある今日この頃です。他にもシーケンスを定義しといてそれを渡すって案もあることにはあります。
いずれにしてもメンバ定数として持っているFVFとの連携を上手くとれなそうなので微妙な感じです。あとメンバとしてマクロを束縛出来ないのも痛いですね。テンプレートで出来ればいいんですが、流石にテンプレートで構造体のメンバ自動生成は無理ですよね。