![](/img/trans.png)
[英]Is it proper to use multiple 'greater-than / less-than' comparators in an evaluation?
[英]Is it possible to make a less-than greater-than ordering relationship between enum values using comparison operator in c++20
如果我們有一個這樣的枚舉類
enum class alpha{ a, b, c, d};
是否可以實現一個運算符,在字母表中的字母之間建立排序關系,使得
enum class alpha{ a, b, c, d};
constexpr auto operator <=> (alpha lhs, alpha rhs)
{
//how do we achieve this?
};
#include <gtest/gtest.h>
TEST(alphabet, allows_ordering_comparison)
{
EXPECT_TRUE(alpha::a < alpha::b);
}
小於比較將評估為真。 我對此的平庸理解是 enum 是一種偏序。 對代碼中的錯誤表示歉意。 考慮這個問題
你不必做任何事情。 該語言為您提供了一個<=>
,它已經做了正確的事情(假設您的枚舉器按順序排列):
enum class alpha{ a, b, c, d};
static_assert(alpha::a < alpha::b);
static_assert(alpha::a <=> alpha::b < 0);
如果您真的想,無論出於何種原因,您都可以手動提供一個與語言為您做的相同的事情:比較基礎值:
constexpr auto operator<=>(alpha lhs, alpha rhs)
{
using T = std::underlying_type_t<alpha>;
return T(lhs) <=> T(rhs);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.