引用了这个问题:可以将枚举类转换为基础类型吗?.
在我的代码中,我有效地:
enum class STATE : short
{
EMPTY,
PRESENT,
PARTIAL,
};
volatile STATE state;
然后我写 atypedef
和 a static_assert
:
typedef volatile std::underlying_type<STATE> state_type;
static_assert (sizeof (state_type) == sizeof (short), "Error - unsafe for use with InterlockedCompareExchange16");
最后我尝试设置状态InterlockedCompareExchange16
:
if (InterlockedCompareExchange16 (static_cast<state_type *>(&state), STATE::PRESENT, STATE::EMPTY) == STATE::EMPTY)
{
}
我从 VS2012 收到以下错误:
我的
static_assert
失败抱怨state_type
与大小不一样short
抱怨它
static_cast
不能从volatile STATE *
到state_type *
请任何人都可以给我任何关于如何最好地修复我的代码的指示吗?