gpt4 book ai didi

c++ - 有没有办法进行编译时检查,一个类的所有成员都在 operator== 中进行比较

转载 作者:行者123 更新时间:2023-12-05 08:48:01 25 4
gpt4 key购买 nike

我想知道在 C++ 中是否有一种方法可以进行编译时检查,验证一个类的所有成员变量是否由 operator== 进行比较?如果有的话,有一种方法可以显式忽略对某些成员的这种限制。

这对我的用例很有用,在这个用例中,我们的开发过程中有一个数据结构会随着时间的推移而变化,并且已经多次发生忘记调整现有 operator== 的情况。这是一个静默错误,它会导致我们称之为“误报行为”,这很难找到。

欢迎提供任何信息。也许可以使用其他方法来解决问题,或者解释为什么无法进行此编译时检查。

编辑:遗憾的是我正在使用 C++17,并且在不久的将来没有办法更新到 C++20。

最佳答案

在 C++20 中,假设你所有的类成员本身都是 == 可比较的,你可以简单地提供一个默认定义:

class C {
// members
public:
bool operator==(C const&) const = default;
};

当您更新您的类(class)时,默认运算符(operator)将自动接收新成员。


就忽略比较中的成员而言。这总是有点复杂,因为默认操作有时会涉及到。一种方法是使用嵌套类

class C {
// members
struct NoEqCompare {
mutable std::mutex mut; // A member you may want to omit.
bool operator==(NoEqCompare const&) const { return true; }
} eqIgnore;
public:
bool operator==(C const&) const = default;
};

std::tie 的老把戏不同——在每个运算符的基础上加入你想要的成员,如果我们需要向其中添加更多运算符,这可能会有点棘手混音,然后混搭成员。权衡您的选择。

关于c++ - 有没有办法进行编译时检查,一个类的所有成员都在 operator== 中进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66635911/

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