1
保持簡潔,現代行業接受C++中位掩碼的方式是什麼?更具體地說,你如何處理函數聲明中的多個可變數量的選項?C++面向對象的等效bitMasks
即想象你有一個功能,可選和可變選項ala傳遞給系統調用的標誌。
保持簡潔,現代行業接受C++中位掩碼的方式是什麼?更具體地說,你如何處理函數聲明中的多個可變數量的選項?C++面向對象的等效bitMasks
即想象你有一個功能,可選和可變選項ala傳遞給系統調用的標誌。
號位掩碼的工作方式相同,因爲他們在C.
做了與一些工作,你可以得到一些額外的類型安全相比普通類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);
}
我會經常做這樣的,每當我創建一個掩碼的事情,但我不能說我已經看到了它作爲「行業所接受」。
總是有'std :: bitset'。儘管如此,我還沒有真正發現任何完美的標誌類型和單獨的封閉範圍。 – chris
那裏......沒有C++的方法來做掩碼...除非我誤解你的問題。位掩碼與C相同。 – TheBuzzSaw
我認爲業界接受的使用位掩碼的方法是使用位掩碼。 – 2013-05-26 22:38:50