不确定这是可能的,但如果可能,如何在C++11中为开关语句使用原子枚举类?例如,
#include <atomic>
#include <iostream>
enum class A {RED, FRUIT, APPLE};
int main(){
std::atomic<A> myAtomicEnum;
myAtomicEnum = A::RED;
switch (myAtomicEnum){
case A::RED:
std::cout << "A::RED \n";
break;
default:
break;
}
return 0;
}给出编译器错误
error: multiple conversions from switch condition type
'std::atomic<A>' to an integral or enumeration type
switch (myAtomicEnum){使用枚举类(而不是原子类)的不同问题强制使用一元+转换为算术类型,但不能将std::atomic<A>传递给一元+。我没有收到任何使用非原子枚举类和不使用一元+的错误。
#include <iostream>
enum class A {RED, FRUIT, APPLE};
int main(){
A myEnum = A::RED;
switch (myEnum){
case A::RED:
std::cout << "A::RED \n";
break;
default:
break;
}
return 0;
}它按预期输出A::RED。
问题的上下文是,我有一个类,其成员可以由多个线程读取/写入,以及使用该成员的switch语句。我有一个解决办法,使用互斥-es,以便我有明确的行为,但如果可能的话,我想使用atomic。
发布于 2022-10-11 13:51:04
在C++ 11中,可以将原子类型变量显式转换为枚举类型,这将调用对象的std::atomic<T>::operator T()强制转换操作符:
switch ((A)myAtomicEnum){
case A::RED:
...顺便说一句,从C++ 14开始,不需要这种显式强制转换,转换到切换类型的转换将隐式地执行(cppreference.com,隐式转换页面)。
https://stackoverflow.com/questions/74029014
复制相似问题