gpt4 book ai didi

c++ - 是否可以在 C++20 中使用比较运算符在枚举值之间建立小于大于大于的排序关系

转载 作者:行者123 更新时间:2023-12-02 16:08:57 25 4
gpt4 key购买 nike

如果我们有这样一个枚举类


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

关于c++ - 是否可以在 C++20 中使用比较运算符在枚举值之间建立小于大于大于的排序关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68565044/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com