我有一個類中,我有一個枚舉,這樣的定義:typedef'ing一個枚舉不會使枚舉值可見
class X
{
public:
enum Direction {DIR_LEFT, DIR_RIGHT};
};
現在我想此枚舉在另一個類可以重複使用,像這樣:
class Y
{
public:
typedef X::Direction Direction;
};
正如預期的那樣,使用ÿ::方向正常工作,如:
void myFunction (Y::Direction dir)
{
}
但ENU內的值meration似乎不會與typedef一起「複製」。如果我寫了下面,我得到的編譯錯誤:
myFunction (Y::DIR_LEFT);
相反,我不得不再次提及原來的地方枚舉的,像這樣的:
myFunction (X::DIR_LEFT);
這違背了我的typdefing的目的枚舉。
我看到的唯一解決方案是將枚舉從類X中移出,並將其放入另一個類(例如MyEnums),以便它可以被X和Y重用(儘管它們仍應該使用MyEnums :: DIR_LEFT並且MyEnums :: DIR_RIGHT),但至少代碼不再依賴於類X.
爲什麼枚舉值本身沒有通過typedef公開?
是否有任何其他模式來管理不同類中的枚舉?
你可能應該刪除'DIR_'前綴,因爲它是一個人造的「窮人的命名空間」:'struct Direction {enum {LEFT,RIGHT};};' - 只比C++ 0x語法更髒「枚舉類方向{LEFT,RIGHT};' – anatolyg 2011-03-15 18:01:36
@anatolyg事實上,這是一個好主意,我做了這個改變。 – 2011-03-15 18:19:04