2017-04-16 53 views
-1

我如何從我的枚舉刪除標誌刪除逐位標誌

我可以添加他們很容易與m_Buttons | (button);

enum WindowButton 
{ 
    None = 0, 

    Minimize = (1 << 0), 
    Maximize = (1 << 1), 
    Close = (1 << 2), 
}; 
inline WindowButton operator|(WindowButton a, WindowButton b) 
{ 
    return static_cast<WindowButton>(static_cast<int>(a) | static_cast<int>(b)); 
} 
inline WindowButton& operator |= (WindowButton& lhs, WindowButton rhs) 
{ 
    return lhs = static_cast<WindowButton>(static_cast<WindowButton>(lhs) | static_cast<WindowButton>(rhs)); 
} 

這是我嘗試添加函數/刪除

void Window::SetButton(WindowButton button, bool show) 
{ 
    if (show) 
     m_Buttons |= (button); 
    else 
     m_Buttons | ~(button); // This is not working to remove flags 
} 
+0

使用'|'而不是'| ='意味着'm_Buttons'不會被修改......但是'| ='也不是正確的。 – hvd

+1

提示:在「flags | = f」上轉換一個位標記。關閉一個bitflag:'flags&=〜f'。 –

回答

4

m_Buttons | ~(button); // This is not working to remove flags

當然不是。它設置它應該清除的位置,然後丟棄結果。應該是

m_Buttons &= ~button; 

NB括號在這裏是多餘的。

+0

'&=':找不到操作符,它需要一個類型爲 – xuzisijuya

+1

@xuzisijuya的左操作數因此,定義'&='與定義'| ='相同的方式,除了使用'&'。 – hvd

+1

@xuzisijuya(我幾乎忘了''operator〜'以及:) – hvd