Qt 中枚举的原子访问
Atomic access of enums in Qt
所以我正在尝试做这样的事情
enum MyEnum
{
A =0,
B,
C
};
QAtomicInteger< MyEnum > myVariable;
我收到一个错误
C2338: template parameter is not an integral type
有没有一种方法可以做到这一点,而无需诉诸于 int
来回转换?这会导致代码难看。
这样做的主旨是多线程。一个线程写入变量,另一个线程从中读取。
我以前做这种事情的方式是声明为
volatile MyEnum myVariable.
但我知道这被认为是不可携带的。
volatile
与原子性无关。
没有"atomic access of enums"这样的东西。枚举是编译时构造,原子访问是运行时。
枚举不是整数,即使它的值本质上是整数。所以下面的代码将起作用:
QAtomicInt myVar;
myVar.store(A);
您可能还会注意到此代码无法编译:
MyEnum ev = 0; // invalid conversion
QAtomicInteger
不应该与枚举一起使用。只需使用标准库中的 std::atomic<MyEnum>
(您需要启用 C++11
或更高版本)。
所以我正在尝试做这样的事情
enum MyEnum
{
A =0,
B,
C
};
QAtomicInteger< MyEnum > myVariable;
我收到一个错误
C2338: template parameter is not an integral type
有没有一种方法可以做到这一点,而无需诉诸于 int
来回转换?这会导致代码难看。
这样做的主旨是多线程。一个线程写入变量,另一个线程从中读取。
我以前做这种事情的方式是声明为
volatile MyEnum myVariable.
但我知道这被认为是不可携带的。
volatile
与原子性无关。
没有"atomic access of enums"这样的东西。枚举是编译时构造,原子访问是运行时。
枚举不是整数,即使它的值本质上是整数。所以下面的代码将起作用:
QAtomicInt myVar;
myVar.store(A);
您可能还会注意到此代码无法编译:
MyEnum ev = 0; // invalid conversion
QAtomicInteger
不应该与枚举一起使用。只需使用标准库中的 std::atomic<MyEnum>
(您需要启用 C++11
或更高版本)。