|
|
1
16
除了更基本的类型外,小于运算并不总是微不足道的,甚至相等也可能因情况而异。 想象一下,一家航空公司希望为所有乘客分配一个登机号码。这个数字反映了登机顺序(当然)。现在,什么决定了谁先于谁?您可以按照客户注册的顺序进行操作,在这种情况下,“小于”操作将比较签入时间。你也可以考虑买票的价格比现在的票价要低。
等等。总而言之,定义一个
|
|
|
2
6
一般来说,定义
当您需要多种方法来比较特定类型时,您可能希望使用函子。例如:
在这种情况下,可能没有一个好的“默认”方式来比较和排序人员,因此无法定义
通常情况下,问题在于定义函子由类的用户决定,因此,每当类需要在有序容器中使用时,您往往会得到同一事物的许多重新定义。 |
|
|
3
5
我的感觉是,一个人应该尽可能地使你的类成为一流的对象,对我来说,这意味着让他们理解尽可能多的操作符。 我已经有一段时间没有写函子了,但它看起来像这样:
} |
|
|
4
3
我认为不定义运算符背后的信息<排序是集合的属性,而不是对象的属性。相同对象的不同集合可能具有不同的顺序。因此,在指定集合类型时,应该使用单独的函子,而不是运算符<。
记住,当我们设计对象模型时,我们只是对现实世界的一个子集建模。在现实世界中,可能有无数种不同的方法来对同一类的对象进行排序,但在我们正在工作的应用程序域中,可能有一种方法是相关的。 如果代码发展到需要第二种排序,而这种排序与第一种排序同样相关,则应重构该类以删除运算符<并将两个排序函数放在单独的函子中。这表明没有一个排名比其他排名更重要。
当然,每一条规则都有例外。如果你不知道是否应该破例,你可能不应该。经验将是你的向导。 |
|
|
5
3
我可能不会像谷歌风格的指南那样深入。
我认为他们的意思是当你超载时
如果您需要比较器的唯一目的是将项放入集合中,那么最好为该上下文专门设置一个函数,而不是在所有上下文中应用运算符。
您可能希望按时间顺序对采购订单进行排序,但一般来说,按总价进行比较是有意义的。如果我们超载
|
|
|
6
2
函子是具有
编辑:建立在什么基础上 James Curran 也就是说,可以在类中定义函子。例如:
|
|
|
7
1
具有讽刺意味的是,函子还需要重写运算符(函数调用运算符)-
|
|
|
Julia · 矢量中相加为总和S的值的数量 3 年前 |
|
|
C_Rod · 在模板方法中确定STL容器中项目的数据类型 4 年前 |
|
|
quantumwell · 将空向量放入std::map() 8 年前 |
|
|
OutOfBound · 对未初始化内存使用算法的优点 8 年前 |
|
|
DarthRubik · 在使用列表删除之后,迭代器如何不无效 8 年前 |