2013-05-26 28 views
1

保持簡潔,現代行業接受C++中位掩碼的方式是什麼?更具體地說,你如何處理函數聲明中的多個可變數量的選項?C++面向對象的等效bitMasks

即想象你有一個功能,可選和可變選項ala傳遞給系統調用的標誌。

+1

總是有'std :: bitset'。儘管如此,我還沒有真正發現任何完美的標誌類型和單獨的封閉範圍。 – chris

+0

那裏......沒有C++的方法來做掩碼...除非我誤解你的問題。位掩碼與C相同。 – TheBuzzSaw

+7

我認爲業界接受的使用位掩碼的方法是使用位掩碼。 – 2013-05-26 22:38:50

回答

0

號位掩碼的工作方式相同,因爲他們在C.

0

做了與一些工作,你可以得到一些額外的類型安全相比普通類C位掩碼。

#include <type_traits> 

enum class MyOpts { 
    OPT1 = 1<<0, 
    OPT2 = 1<<1, 
    OPT3 = 1<<2, 
    OPT_ALL = OPT1 | OPT2 | OPT3 
}; 

#define MYOPTS_BINARY_OP(OP) \ 
    inline MyOpts operator OP(MyOpts a, MyOpts b) { \ 
     using num_type = std::underlying_type<MyOpts>::type; \ 
     return static_cast<MyOpts>(static_cast<num_type>(a) OP \ 
            static_cast<num_type>(b)); \ 
    } \ 
    inline MyOpts& operator OP ## = (MyOpts& a, MyOpts b) { \ 
     a = a OP b; \ 
     return a; \ 
    } 

MYOPTS_BINARY_OP(|) 
MYOPTS_BINARY_OP(&) 
MYOPTS_BINARY_OP(^) 
#undef MYOPTS_BINARY_OP 

inline MyOpts operator~(MyOpts opts) { 
    return static_cast<MyOpts>(
     ~static_cast<std::underlying_type<MyOpts>::type>(opts) & OPT_ALL); 
} 

我會經常做這樣的,每當我創建一個掩碼的事情,但我不能說我已經看到了它作爲「行業所接受」。