Home > Software design >  std:bitset c external initialization
std:bitset c external initialization

Time:08-22

I want to wrap or cast a std:bitset over a given constant data arrary or to formulate it differently, initialize a bitset with foreign data.

The user knows the index of the bit which he can check then via bitset.test(i). Data is big, so it must be efficient. (Machine bitorder does not matter, we can store it in the right way). Thats what I tried:

constexpr uint32_t          data[32] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32};
constexpr std::bitset<1000>  bset(1); //bit bitset initialized with a value here
constexpr  std::bitset<1000> bset2(data); //init it with our data, this is not working

The number of bits is 32*32=1024 that is held by data. With my bitset i can address the almost full range. User does not need more than 1000. Can someone please explain to me how this is done in cpp in my example above with bset2?

CodePudding user response:

Unfortunately std::bitset does not have suitable design for what you want.

It is not designed an aggregate (like std::array is) so aggregate initialiation is impossible (and also copying bits into it with std::memcpy is undefined behavior).

It can take only one unsigned long long in constexpr constructor.

The operator [] and set method will become constexpr in C 23 so there will be a way after that.

Just use constexpr raw array or std::array and add bit accessing methods until then.

  • Related