|
|
1
12
您将看到执行双重分派-即根据两个对象而不是一个对象的类型调用虚拟函数。看看这篇维基百科的文章 http://en.wikipedia.org/wiki/Double_dispatch . 我不得不说,每当我发现自己处于这种情况时,我都试图改变方向:—) 我可以对你的代码做一些观察吗?它完全没有问题,只是:
|
|
|
2
1
我可能在这个问题上遗漏了一些基本的东西,看起来你基本上是在尝试做一个2级分类:
如果是这样的话,有很多方法可以为猫剥皮,但是为什么不创建一个虚拟函数(例如 密钥() )所有类都覆盖? 密钥() 可以返回 STD::配对 ,第一个成员表示类顺序(可能是一个字符,如“b”、“c”和“g”,方便地已经按正确的顺序排列),第二个成员表示类中的排名/顺序(这将是类中的id/var数据成员)。 STD::配对 已经支持2级排序。 如果这是对问题的正确理解,可能是 this code sample 会为你工作吗? |
|
|
3
0
让对象在虚拟方法中提供排序键,默认为ID:
比较器现在使用key()方法而不是直接访问id:
然后子类可以重写这个行为并替换
现在,sort键取决于baseobject*指向的具体实例,而不是强制转换。 编辑:哎呀,我只是很好地理解了你的问题,认识到这并不能真正解决。看尼尔的答案。 |
|
|
4
0
继续你自己:) |
|
|
5
0
我看到了两种方法——哪一种取决于你想如何思考这个问题(以及谁拥有两个对象中哪一个应该是第一个的概念)。 如果对象本身应该知道如何相互排序,并且您肯定不会用不同的规则派生更多的类,那么我可能会向名为“int primarysortkey()”和“int secondarysortkey”的基类添加一些虚拟函数。()我将在比较器函数中使用这些函数。 另一方面,如果对象不知道应该如何排序(比较器函数需要了解更多关于对象、它们的意义和结构的信息),我可能会找到在比较器中获取对象类的方法(通过reflecti或者通过引入一个类型的概念,在比较器中编写一些扭曲的逻辑,来弄清楚该怎么做。 |
|
6
0
我只有一个问题:能够按这个特定的顺序对它们进行排序是很重要的吗,还是您可以按类型(按任何顺序)然后按类型中的键对它们进行排序?
以及
不,你不能把
唯一的问题,正如所提到的,是你不能控制哪一个类别是最低的。这需要一些模板魔术(例如),但这很重要吗? |
|
|
Rewind · 同时搜索最大值/最小值的操作顺序 1 年前 |
|
|
badbee · 使用xsl:sort时保留未排序元素的问题 1 年前 |
|
|
josepmaria · Pandas顺序列,按对列出 1 年前 |
|
|
BTBts · Python3文件名的字母数字排序[重复] 1 年前 |
|
|
Paul-ET · 对树状图应用程序发送的第一列进行排序失败 1 年前 |
|
VonDerHase · 从列表中删除特定值,Python 1 年前 |
|
|
Nico44044 · JS对数组进行排序,数组末尾为null和空值 1 年前 |