我有C++類的混合,其中一些將狀態變量0..9存儲爲整數,其他使用'0'...'9'。目前我這樣做:使用枚舉進行類型檢查 - 如何正確範圍
enum { kOne = '1' };
class StoresValueAsInt {
static int value; // contains 0 ... 9
};
class StoresValueAsChar {
static char value; // contains '0' ... '9'
};
class StoresValueAsChar {
static char value;
};
template <typename X>
isOne() { return X::value == kOne; }
這使我可以寫出錯誤代碼isOne<StoresValueAsInt::value>()
。相反,我想讓編譯器抱怨這種不正確的用法。我試過如下:
enum ValueInt {
kOne = 1
};
enum ValueChar {
kOne = '1'
};
class StoresValueAsInt {
static ValueInt value;
};
class StoresValueAsChar {
static ValueChar value;
};
class StoresValueAsChar2 {
static ValueChar value;
};
然而,這不起作用,因爲通力是可見的命名空間級別,因此它具有通力衝突的聲明。
有沒有辦法在命名空間中聲明枚舉?或者更好的方法在這裏?
已更新:增加了我目前所做的;希望澄清我的用例。
編譯器不會抱怨'char'和'INT之間的比較'因爲'char'是一個'unsigned int'(或者在某些系統上是'unsigned short') – Chad 2011-05-05 20:35:35
是的,那麼編譯器不會抱怨第一個版本中的錯誤。這就是爲什麼我想定義枚舉來進行類型檢查的原因;編譯器會認爲ValueInt和ValueChar是不同的... – hrr 2011-05-06 02:29:24
看我的解決方案然後 – Chad 2011-05-06 02:40:48