为什么 std::bitset 只取 constexpr 值?
Why does std::bitset only takes constexpr value?
我想在运行时决定位集的大小。
但是 std::bitset<N>
只接受 N 的 constexpr 值,甚至不接受 const 值。
这意味着必须在编译之前确定 bitset 的大小。
我知道std::vector
提供bool数组的优化,
但它缺少我需要的那些有用的 bitset 成员。
问题一:为什么N必须是constexpr值?
好吧,我猜那是因为 bitset 是模板,但这仍然是一个巨大的不便。
Bitset 可能是 class 而不是模板。
它的构造函数可以将 size_t 作为参数,而不是我可以创建可变长度的位集。
同样的问题也适用于 std::array
.
可能是 std::array<type> foo(size, values)
。
问题 2:有没有 'Hacks' 可以让我创建可变长度位集?
考虑到模板的工作原理,我很确定不会有任何东西。
但也许,有一些聪明的技巧:)
如果没有,我将不得不使用 std::vector<bool>
并自己实现 bitset 成员。
Bitset could have been a class rather than a template.
它是为特定目的而制作的,如果那不是你的,你只需要使用不同的东西。
如果你想存储单个位,这意味着你喜欢存储可变大小的 bool
,你可以简单地使用 std::vector< bool >
If not, I'll have to use std::vector and implement bitset members myself.
位集是位的容器。那么你自己实现bitset是什么意思?
Why does N has to be constexpr value?
你是对的。 std::bitset
和 std::array
的大小都指定为模板参数,因此无法在运行时设置。
不过,过去有一些提议在C++标准中引入动态数组。其中之一被称为 std::dynarray
. Eventually, it won't be introduced into standard but you can see here 对其生命周期的更详尽的描述。
Is there any 'Hacks' that lets me create variable-length bitset?
如果您有权访问 Boost 库,则可以使用其 dynamic_bitset。
我想在运行时决定位集的大小。
但是 std::bitset<N>
只接受 N 的 constexpr 值,甚至不接受 const 值。
这意味着必须在编译之前确定 bitset 的大小。
我知道std::vector
提供bool数组的优化,
但它缺少我需要的那些有用的 bitset 成员。
问题一:为什么N必须是constexpr值?
好吧,我猜那是因为 bitset 是模板,但这仍然是一个巨大的不便。
Bitset 可能是 class 而不是模板。
它的构造函数可以将 size_t 作为参数,而不是我可以创建可变长度的位集。
同样的问题也适用于 std::array
.
可能是 std::array<type> foo(size, values)
。
问题 2:有没有 'Hacks' 可以让我创建可变长度位集?
考虑到模板的工作原理,我很确定不会有任何东西。
但也许,有一些聪明的技巧:)
如果没有,我将不得不使用 std::vector<bool>
并自己实现 bitset 成员。
Bitset could have been a class rather than a template.
它是为特定目的而制作的,如果那不是你的,你只需要使用不同的东西。
如果你想存储单个位,这意味着你喜欢存储可变大小的 bool
,你可以简单地使用 std::vector< bool >
If not, I'll have to use std::vector and implement bitset members myself.
位集是位的容器。那么你自己实现bitset是什么意思?
Why does N has to be constexpr value?
你是对的。 std::bitset
和 std::array
的大小都指定为模板参数,因此无法在运行时设置。
不过,过去有一些提议在C++标准中引入动态数组。其中之一被称为 std::dynarray
. Eventually, it won't be introduced into standard but you can see here 对其生命周期的更详尽的描述。
Is there any 'Hacks' that lets me create variable-length bitset?
如果您有权访问 Boost 库,则可以使用其 dynamic_bitset。