![](/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.