在这段代码中
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());
because data()
不存在于std::vector<bool>
。而且我无法更改界面legacyFunction()
.
C 风格的 bool 数组有一个好的替代方案吗?
您可以使用std::unique_ptr<T[]> http://en.cppreference.com/w/cpp/memory/unique_ptr and std::make_unique http://en.cppreference.com/w/cpp/memory/unique_ptr/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 http://en.cppreference.com/w/cpp/container/array.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)