【发布时间】:2021-09-20 02:20:45
【问题描述】:
在我目前正在开发的库中,有这个小东西:
enum class BoolMode : uint8_t
{
TrueIfFalse = 0,
TrueIfTrue = 1
};
这是一个小助手,用于轻松生成可逆条件检查,同时只需创建一个易于编写和阅读的单一实现...
为了让这个帮助器易于使用,我必须为bool 定义比较运算符(显然)。我是这样做的:
inline constexpr bool operator ==(const bool boolValue, const BoolMode mode) noexcept
{
return (boolValue == static_cast<const bool>(mode));
}
inline constexpr bool operator !=(const bool boolValue, const BoolMode mode) noexcept
{
return (boolValue != static_cast<const bool>(mode));
}
inline constexpr bool operator ==(const BoolMode mode, const bool boolValue) noexcept
{
return (boolValue == static_cast<const bool>(mode));
}
inline constexpr bool operator !=(const BoolMode mode, const bool boolValue) noexcept
{
return (boolValue != static_cast<const bool>(mode));
}
我想知道这样定义BoolMode 是否有任何好处:
enum class BoolMode : bool
{
TrueIfFalse = false,
TrueIfTrue = true
};
由于无论如何都必须努力来定义比较运算符,所以我看不出最好的选择是什么......
问题:
- 使用
bool作为底层类型的目的是什么? - 有具体的使用例子吗?
- 这段代码中有什么我应该注意的吗?
- 有任何改进代码的线索和/或建议吗?
提前致谢。
【问题讨论】:
标签: c++ enums underlyingtype