【发布时间】:2009-01-28 05:23:27
【问题描述】:
当比较来自不同来源的枚举时,例如以下代码中的枚举,GCC 会发出警告。有没有办法在没有 c 样式转换的情况下避免这些警告?
struct Enumerator
{
enum { VALUE = 5 };
};
template<int V>
struct TemplatedEnumerator
{
enum { VALUE = V };
};
if(Enumerator::VALUE == TemplatedEnumerator<5>::VALUE)
{
...
}
GCC 会发出以下类型的警告:
GCC: warning: comparison between 'enum ...' and 'enum ...'
【问题讨论】:
-
我相信你会被演员卡住。
-
struct Enumerator : boost::integral_constant
{};甚至 struct Enumerator : mpl::int_ {};比枚举恕我直言。 c++1x 也将有integral_constant => 你未来是安全的。然后你就可以比较不同类型的 ::value 了。 -
不幸的是,由于项目提升的政策是禁止的:(