簡體   English   中英

C ++-將字符引用轉換為bool Referenece(std :: vector <bool> )

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM