bool
というエラーステータスビットをstruct
の内部に格納する必要があります。今私は/ none /すべての変数が設定されているかどうかをチェックする方法が必要になります。C++はstruct内のすべてのステータスビットをチェックします
私はstd::bitset
があることを知っていますが、インデックスではなく、名前でアクセスすることができます。だから私は、このような構造をした:
#include <cassert>
union ErrorStatus
{
struct {
bool error1;
bool error2;
bool error3;
};
std::array<bool, 3> bits;
bool any()const{
return std::any_of(bits.begin(), bits.end(), [](const bool& b){return b == true; });
}
bool none() const {
return !any();
}
bool all()const{
return !std::any_of(bits.begin(), bits.end(), [](const bool& b){return b == false; });
}
};
int main(int argc, char** argv)
{
ErrorStatus errorStatus;
assert(errorStatus.none() == true);
errorStatus.error2 = true;
assert(errorStatus.none() == false);
return 0;
}
しかし、これで、私はstruct
内部ブール値の数と一致するようにstd::array
宣言で番号を変更する必要があるという問題があります。
array
のサイズとstructのboolの量を同期させる方法はありますか? もっとエレガントな(そしてうまくいけば良い)代替品がありますか?
です。 STLの実装ではサイズに対して最適化が行われる可能性があります。その場合、使用できると思われる操作が利用できなくなります。 – Steve
'std :: vector'を使うかもしれませんか? – Ron
@Steveブールの数が動的でない場合、私はなぜあなたがベクトルを使用すべきかわかりません。固定サイズの配列に 'std :: array'を使う –