gpt4 book ai didi

c++ - 比较不同类型的对象是否被认为是好的设计?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:15:35 25 4
gpt4 key购买 nike

您会认为这是糟糕设计的证据吗?

//FooType and BarType not in the same hierarchy
bool operator==(const FooType &, const BarType &);
bool operator<(const FooType &, const BarType &);

例如,如果 FooTypedouble 测量自纪元以来的秒数,而 BarType 是三个整数(年、月和日)的元组) 以 UTC 格式提供日期,上述比较“有意义”。

你见过这样的类型间比较吗?他们在 C++ 社区中不受欢迎吗?

最佳答案

首先,使用自由函数代替成员函数并没有错,事实上这是推荐的做法。参见 Scott Meyer 的 How Non-Member Functions Improve Encapsulation .不过,您需要提供两个方向的比较:

bool operator==(const FooType &, const BarType &);
bool operator==(const BarType &, const FooType &);

其次,如果比较有意义,提供这些比较是完全可以接受的。例如,标准库允许您比较 std::complex 值是否与浮点相等,但不小于。

您要避免的一件事是没有意义的比较。在您的示例中,其中一个时间值是 double 值,这意​​味着一旦您考虑标准促销,就会对任何浮点或整数值进行比较。这可能超出您的预期,因为无法确定任何特定值是否代表时间。缺少类型检查意味着可能会出现意外错误。

关于c++ - 比较不同类型的对象是否被认为是好的设计?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17435786/

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