閑古鳥

オールドプログラマの日記。プログラミングとか病気(透析)の話とか。

ビットフィールド一発定義

ビット演算をビットフィールドで代用する場合、面倒な構造体の定義をしなければなりませんが、それをプリプロセッサを使って一行で済ませてしまおうという試み。……いえ、ただ単に BOOST_PP 使ってみたかっただけです。

#define BITFLD(z, n, _) unsigned nBit ## n : 1;
union uniBits
{
    unsigned iVal;
    struct
    {
        BOOST_PP_REPEAT(32, BITFLD, nil)
    } stBits;
};

stBits に nBit0 から nBit31 までのメンバ変数が作成されます。本当は int が 32Bit ではない環境でも手を加えずに動作させたかったのだけれど、 BOOST_PP_REPEAT の引数に定数を入れる事ができなかったので断念。

でも、 C++ 使えるなら std::vector<bool> とか std::bitset<> 辺りを使うだろうし、出番はなさそうですが。