gpt4 book ai didi

c++ - 非 Pod 对象的通用运算符 ==

转载 作者:行者123 更新时间:2023-11-28 04:16:10 25 4
gpt4 key购买 nike

在进行一些单元测试时,我希望能够比较一些非常简单的结构(它们只包含公共(public)数据成员)。我可以为所有这些单独编写一个 operator==,但这会很麻烦且重复。所以我决定尝试以一种通用的方式来做到这一点。但是有一个问题 - 其中一些不是 POD,因为它们的一些字段具有非 POD 类型,让我们以 std::list 为例。

struct NonPod {
std::list<int> lst;
};

struct NonPod2 {
std::list<NonPod> lst;
};

template<class T>
bool operator==(const T& lhs, const T& rhs) {
//what should I put here to make it work safely
//to compare NonPod with other NonPod
//ant NonPod2 with other NonPod2
}

AFAIK,为了安全地比较 POD,我可以只使用 std::memcmp 就可以了。是否也可以为非 POD 类型执行通用 operator== ?如果是,怎么办?

最佳答案

遗憾的是,在 C++17(或更早版本)中无法做到这一点。 C++20 将允许您添加:

auto operator<=>(const class_name&) const = default;

每个类(class)。这将为您提供以显而易见的方式定义的所有比较运算符。

如果类是由代码生成器创建的,那么添加比较函数应该很容易。

关于c++ - 非 Pod 对象的通用运算符 ==,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56582737/

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