簡體   English   中英

是否可以在 c++20 中使用比較運算符在枚舉值之間建立小於大於順序的關系

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM