【发布时间】:2021-06-12 14:19:14
【问题描述】:
我想知道 C++ 中是否有一种方法可以进行编译时检查,以验证一个类的所有成员变量是否由operator== 进行比较?如果有的话,有一种方法可以明确地忽略某些成员上的这个约束也是有用的。
这对于我的用例很有用,其中在我们的开发过程中有一个数据结构随着时间的推移而变化,并且已经多次发生过调整现有的 operator== 被遗忘的情况。这是一个静默错误,它会导致我们称之为“误报行为”,这很难找到。
感谢任何信息。可能是解决问题的替代方法,或者解释为什么这个编译时检查可能不可能。
编辑:遗憾的是,我正在使用 C++17,并且在不久的将来无法更新到 C++20。
【问题讨论】:
-
不,但在 C++20 中,您可以声明一个 defaulted comparison operator,它会自动比较所有基数和成员。
-
您可以使用/编写外部工具进行该检查。例如,clang 工具可能允许检查。
标签: c++ operator-overloading c++17 comparison-operators