我有幾個類似於下面的嵌套枚舉。我想要將isValid()
函數定義爲儘可能接近enum
定義。實際的代碼更加冗長,嵌套的命名空間和結構多層次。關於嵌套枚舉的C++操作
struct S
{
enum E { V1, V2 };
/* ????? */ bool isValid(E e) { return e==V1 || e==V2; }
};
template <typename Enum>
bool legalValue(Enum e)
{
return isValid(e);
}
是否有可能使此代碼工作,而不必把isValid()
在全局命名空間?
請不要評論isValid()
是否是好的做法。這個問題同樣適用於希望覆蓋operator<<()
以便能夠有效地傳輸枚舉值的人。在這種情況下,operator<<()
的本質是否可以位於struct S
的內部?
我不確定這裏出現了什麼問題。只需使'isValid()'函數'static',並更改'legalValue()'函數來執行'return S :: isValid(e);',我認爲這應該編譯... – 2012-01-03 15:41:18
這個想法是'legalValue()'應該適用於任何具有關聯'isValid()'函數的'enum'。它不適用於嵌套'class'或'struct'的枚舉。 –
paperjam
2012-01-03 15:43:20
嘗試將枚舉放入命名空間中,而不是結構。這樣,ADL應該踢(我沒有測試過),你應該能夠調用isValid無論在聲明枚舉的名稱空間。 – paercebal 2012-01-03 15:44:54