私はオープン ソース プロジェクトのコードを調べていて、複数の場合に値をビットシフトすることによって列挙型の値が割り当てられていることに気付きました。これを行う特定の理由はわかりません。また、+1 をインクリメントするだけで値を割り当てるよりも効率が向上することもわかりません。
とにかく、これはおそらく、何が私を混乱させているかを示すコードがなければほとんど意味がありません.
クラス1
enum EventType {
NONE = 0,
PUSH = 1<<0,
RELEASE = 1<<1,
DOUBLECLICK = 1<<2,
DRAG = 1<<3,
MOVE = 1<<4,
KEYDOWN = 1<<5,
KEYUP = 1<<6,
FRAME = 1<<7,
RESIZE = 1<<8,
SCROLL = 1<<9,
PEN_PRESSURE = 1<<10,
PEN_ORIENTATION = 1<<11,
PEN_PROXIMITY_ENTER = 1<<12,
PEN_PROXIMITY_LEAVE = 1<<13,
CLOSE_WINDOW = 1<<14,
QUIT_APPLICATION = 1<<15,
USER = 1<<16
};
クラス2
enum EventType {
EVENT_MOUSE_DOUBLE_CLICK = osgGA::GUIEventAdapter::DOUBLECLICK,
EVENT_MOUSE_DRAG = osgGA::GUIEventAdapter::DRAG,
EVENT_KEY_DOWN = osgGA::GUIEventAdapter::KEYDOWN,
EVENT_SCROLL = osgGA::GUIEventAdapter::SCROLL,
EVENT_MOUSE_CLICK = osgGA::GUIEventAdapter::USER << 1,
EVENT_MULTI_DRAG = osgGA::GUIEventAdapter::USER << 2, // drag with 2 fingers
EVENT_MULTI_PINCH = osgGA::GUIEventAdapter::USER << 3, // pinch with 2 fingers
EVENT_MULTI_TWIST = osgGA::GUIEventAdapter::USER << 4 // drag 2 fingers in different directions
};
これを正しく読んでいる場合、EventType::USER の明示的な値は 65536 またはバイナリで 10000000000000000 です。EVENT_MULTI_TWIST の値は、バイナリで 1048576 または 10000000000000000000 です。
次のようなものを持っているだけでなく、この方法で列挙値を割り当てる目的は何でしょう:
enum EventType {
NONE = 0,
PUSH = 1,
RELEASE = 2,
DOUBLECLICK = 3,
DRAG = 4,
MOVE = 5,
KEYDOWN = 6,
KEYUP = 7,
FRAME = 8,
RESIZE = 9,
SCROLL = 10,
PEN_PRESSURE = 11,
PEN_ORIENTATION = 12,
PEN_PROXIMITY_ENTER = 13,
PEN_PROXIMITY_LEAVE = 14,
CLOSE_WINDOW = 15,
QUIT_APPLICATION = 16,
USER = 17
};