为了确保将整数转换为枚举类的安全和可维护性,我们应该使用C++17及更高版本中的std::from_chars函数,并结合static_assert检查是否存在枚举值与整数值的匹配,以避免枚举意外添加或删除项目时的错误。
示例代码如下:
#include
enum class Color { Red = 1, Green = 2, Blue = 3 };
template
template
T result;
if (auto [ptr, ec] = std::from_chars(std::to_string(value).c_str(), std::to_string(value).c_str() + std::to_string(value).size(), reinterpret_cast::type&>(result)); ec == std::errc())
return result;
throw std::invalid_argument("Value cannot be converted to enum class");
}
int main() { int value = 2;
Color color = to_enum(value);
std::cout << static_cast(color) << std::endl;
return 0;
}
上一篇:安全多公司协会