![](/img/trans.png)
[英]How is std::vector<bool>::reference assigned to bool type in c++?
[英]C++ - Cast char reference to bool referenece (std::vector<bool>)
我在将char引用转换为bool引用时遇到问题。 我有一个简单的GUI库,它具有以下方法gui->addButton(string name, bool& value);
。 如果单击该按钮,则布尔值将翻转。 现在,我想要一个动态/未知的按钮。 因此,尽管我可以创建一个布尔向量,但只需为创建的每个按钮push_back一个新的布尔值,并为addButton方法提供对最后一个向量元素的引用。 像这样:
bool isOnFlag = true;
buttonFlagVector.push_back(isOnFlag);
gui->addButton(name, buttonFlagVector.back());
遗憾的是,由于bool的vector专门化 ,因此无法正常工作。
据我了解,避免对bool进行专业化的常见方法是使用std::vector<char>
。 我试过了,我遇到的问题是我不知道如何从char引用转换为bool引用。 dynamic_cast
reinterpret_cast
吗? 他们似乎都不起作用。
有人可以指出我正确的方向吗? 提前致谢!
不幸的是, bool
的大小是由实现定义的,并且在不同的编译器上可能有所不同。 因此,即使reinterpret_cast
可以工作,我还是建议不要这样做。 相反,您可以使用一个小的包装器struct
如下所示:
struct SpecialBool { bool b; };
std::vector<SpecialBool> bools;
不幸的是,您的方法还有另一个问题,就是当您仍向其中添加元素时,无法将对元素的引用存储在std::vector
。 在每个push_back
,都可能会重新分配内部存储器,这将使您之前的所有引用无效。
您可以将bool
包装在struct
以避免std::vector<bool>
:
struct buttonState
{
bool checked;
};
std::vector<buttonState> buttonStates;
后者:
bool isOnFlag = true;
buttonFlagVector.push_back({isOnFlag});
gui->addButton(name, buttonFlagVector.back().checked);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.