我相信你可以提供自己的比较运算符,但你必须首先命名枚举:
struct Enumerator { enum Values { VALUE = 5 }; }; templatestruct TemplatedEnumerator { enum Values { VALUE = V }; }; template bool operator==(Enumerator::Values lhs, typename TemplatedEnumerator ::Values rhs) { return static_cast (lhs) == static_cast (rhs); } template bool operator==(typename TemplatedEnumerator ::Values rhs, Enumerator::Values lhs) { return static_cast (lhs) == static_cast (rhs); }
有趣的是,Visual Studio实际上没有警告比较两个枚举器类型,而是在if
语句中警告一个常量值- 就像你执行此操作一样:
if (true) {...}