template< class T>
class CEnum
{
public:
CEnum(int minV=0, const int maxV=255, const int uV=255): m_maxVal(maxV), m_minVal(minV), m_unknownVal(uV) {}
operator T() const { return m_val; }
operator int() const { return m_val; }
const CEnum& operator=(const int val)
{
m_val=IsUnknown(val)? (T)m_unknownVal:(T)val;
return *this;
}
const CEnum& operator=(const CEnum& val) { m_val=val.m_val; return *this; }
bool operator==(const T& val)const { return m_val==val.m_val; }
bool operator==(const int val)const { return m_val==val; }
bool operator!=(const T& val)const { return m_val!=val.m_val; }
bool operator!=(const int val)const { return m_val!=val; }
private:
bool IsUnknown(const int val) { return (val<m_minVal || val>m_maxVal || val==m_unknownVal); }
const int m_maxVal;
const int m_minVal;
const int m_unknownVal;
T m_val;
};