【发布时间】:2021-07-21 15:34:27
【问题描述】:
我在 SO 上搜索了一下,很惊讶我没有找到任何类似的问题。很高兴有任何提示,以防万一这已经得到回答。
我有一个定义了很多枚举类的代码库。其中一些指定了一个 totalNum 常量,例如
enum class Foo : int
{
a,
b,
c,
totalNum
}
别人没有这样的
enum class Bar : bool
{
oneOption,
otherOption
}
那我有一个基本是这样的功能
template <class EnumClassType>
EnumClassType typeToEnum (typename std::underlying_type<EnumClassType>::type value)
{
// If you hit this assertion, the value is outside of the valid enum range
assert (isPositiveAndBelow (value, decltype (value) (EnumClassType::totalNum)));
return EnumClassType (value);
}
虽然这对指定 totalNum 的枚举有效并且有意义,但如果枚举中没有这样的标识符,我想跳过这个断言。有没有办法做到这一点?代码库目前使用 C++ 14,但由于即将发生编译器更改,也欢迎使用 C++ 17 解决方案。
【问题讨论】:
-
您可以使用 SFINAE 到 provide an overload,如果一个项目是
enum并且具有::totalNum,那么它会执行静态断言。
标签: c++ c++17 c++14 enum-class