0

如果我们有这样的枚举类


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);
} 

小于比较将评估为真。我对此的平庸理解是枚举是部分排序。为代码中的错误道歉。考虑这个问题

4

1 回答 1

5

你不必做任何事情。该语言<=>为您提供了一种已经做正确事情的方法(假设您的枚举器是有序的):

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);
}
于 2021-07-28T17:42:12.507 回答