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 或更高版本)。