ビット列の取り扱い
Expression Templete 大好き人間としては見逃せないエントリがあったので紹介。
あまのりょーさんのツィートから。
このエントリの前のエントリで「え、std::vector<bool>と何が違うの?」って思ったら、全然違った。operator,() を定義して
unsigned int make_rgb555(unsigned int r, unsigned int g, unsigned int b)
{
const Unsigned<5> r5(r);
const Unsigned<5> g5(g);
const Unsigned<5> b5(b);
return (r5, g5, b5);
}
とか
(a, reserve<2>, b) = 0x77; // a => 3, 途中2ビットは捨てられる, b => 3
なんてのが出来るようになっているのが変態w
嘘ですごめんなさい。正直その発想が一種の発明を見たようで嫉妬しました。
これって pair とかにも応用出来るかな。ちょっと世界が開けたかも。
ただ普段は左辺に複数の変数を持ってこられるべきだと考えている人間だけれども、これやっちゃうと C++ の文法から逸脱しちゃうからなあ。実用しちゃっていいのかどうか判断に苦しむ。
かといって、昔は「マクロでトリッキーな事をしたら読みにくくなるから駄目」なんて言われていて「そんなことなくね?」って思っていたのに、案の定 boost なんて変態マクロが公然と使われていて、しかもそれが素晴らしいとか人気を博しているから世の中いい加減。
ET も変態マクロもデバッグの効率を下げる事が多いから、良くないというのも分かるけどね。