C++ - 对bool referenece(std :: vector <bool>)的Cast char引用

Foa*_*aly 1 c++ casting reference vector

我在向bool引用转换char引用时遇到问题.我有一个简单的GUI库,具有以下方法gui->addButton(string name, bool& value);.如果单击该按钮,则会翻转bool.现在我想拥有一个动态/未知的按钮.因此,虽然我可以创建一个bool向量,但只需为每个创建的按钮push_back一个新的bool,并为addButton方法提供对最后一个向量元素的引用.像这样的东西:

bool isOnFlag = true;
buttonFlagVector.push_back(isOnFlag);
gui->addButton(name, buttonFlagVector.back());
Run Code Online (Sandbox Code Playgroud)

可悲的是,因为bool的矢量专门化,这是行不通的.

从我读到的,避免bool专业化的常用方法是使用a std::vector<char>.我试过了,我遇到的问题是我不知道如何从char引用转换为bool引用.dynamic_cast reinterpret_cast?他们似乎都没有工作.

有人能指出我正确的方向吗?提前致谢!

小智 6

不幸的是,a的大小bool是实现定义的,并且在不同的编译器上可能不同.所以,即使一个reinterpret_cast可以工作,我会建议反对它.相反,你可以使用这样的小包装struct:

struct SpecialBool { bool b; };
std::vector<SpecialBool> bools;
Run Code Online (Sandbox Code Playgroud)

不幸的是,您的方法还有另一个问题,即您std::vector仍然在向元素添加元素的同时存储对元素的引用.在每个push_back内部存储器上可能会重新分配,这将使您以前的所有引用无效.

  • 作为一种解决方法,如果您事先知道按钮的数量(通常是这种情况),您可以使用`reserve`方法预先分配所需的空间.或者,更好的是,使用`std :: array`.如果你使用`array`,你甚至没有`bool`专业化的问题. (2认同)