在这段代码中
void legacyFunction(int length, bool *bitset)
{
// stuff, lots of stuff
}
int main()
{
int somenumber = 6;
// somenumber is set to some value here
bool *isBitXSet = new bool[somenumber];
// initialisation of isBitXSet.
legacyFunction(somenumber, isBitXSet);
delete[] isBitXSet;
return 0;
}
我想替换 bool *isBitXSet = new bool[somenumber];
通过类似的东西
std::vector<bool> isBitXset(somenumber, false);
可是我做不到
legacyFunction(somenumber, isBitXSet.data());
因为data()
std::vector<bool>
不存在.而且我无法更改 legacyFunction()
的界面.
C 风格的 bool 数组有什么好的替代品吗?
最佳答案
您可以使用 std::unique_ptr<T[]>
和 std::make_unique
:
int main()
{
int somenumber = 6;
// somenumber is set to some value here
auto isBitXSet = std::make_unique<bool[]>(somenumber);
// initialisation of isBitXSet.
legacyFunction(somenumber, isBitXSet.get());
return 0;
}
或者,您可以“欺骗”std::vector
通过创建自己的 bool
包装器:
struct my_bool { bool _b; };
std::vector<my_bool> v; // will not use `vector<bool>` specialization
如果您在编译时知道数组的大小,请考虑使用 std::array
.
关于c++ - 有没有标准的方法来替换 C 风格的 bool 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46115237/