C++ - 将 char 引用转换为 bool 引用 (std::vector<bool>)

标签 c++ vector casting reference

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

bool isOnFlag = true;
buttonFlagVector.push_back(isOnFlag);
gui->addButton(name, buttonFlagVector.back());

可悲的是因为specialization of vector for bools ,那是行不通的。

据我所知,避免 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 上,内部存储器可能会被重新分配,这将使您之前的所有引用无效。

关于C++ - 将 char 引用转换为 bool 引用 (std::vector<bool>),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28812671/

相关文章:

c# - 如何将对象类型转换为 float ,其中对象可以是任何类型的数字,如 int、long、float、double 等

c++ - 未找到 TCS34725 ... 检查您的连接

c++ - 在 C++ 中的 unordered_map 中排序

c++ - 复选框更改文本颜色

c++ - 为什么类中的 vector 自动变为 NULL

c++ - 在类中使用 libuv

c++ - 在 C++/C 中查找文件的一部分的大小?

c++ - 原子地 std::vector::push_back() 并返回索引

c++ - 将 vector 存储和写入队列c++

c++ - 如何在不修改类声明的情况下在创建后正确填充对象?