mql5中的OOP、模板和宏,细微之处和用途 - 页 11

 
TheXpert:

你疯了吗?

在这种情况下,我并不关心执行时间,类型也可以用其他方式定义,例如通过虚拟覆盖函数。这段代码是在10分钟内当场写成的,以显示其原理,并不是一个工作变体。

 
Ilya Malev:

CBase的意义何在?还有,为什么要对同一类型的两个值进行比较?

是的,你在这里根本不需要CBase。 你的IComparer出于某种原因继承了Number,尽管它们是绝对不同的实体。 Comparer不是Number的一个接口,它是一个接受两个数字的独立对象。 所以你的Comparer应该只是IComparer<T1,T2>,没有任何Number和CBase
 
对了,又是一个有自我意识的屎壳郎。
 
自我感觉良好只是当有人站在树枝上开始扔便便的时候。非常重要的大便。我只是给与我们讨论模板话题的同志(不是你)写了一封信,说明我如何看待这样的实施。
 
Ilya Malev:

所以你有一个语义上的错误:Comparer和Comparable这两个概念混在一起。 前者是一个比较器(一个独立的类),而后者是被比较对象的一个接口(即它把这个对象与另一个对象进行比较)。 这个对象可以继承这个

 
Alexey Navoykov:

所以你有一个语义上的错误。 Comparer和Comparable这两个概念被混淆了。 第一个是Comparer(一个独立的类),第二个是被比较对象的一个接口(即把这个和另一个对象进行比较)。

我的Number只是Comparable类型,而接口是Comparer类型,它们在Sharp中也是以某种方式巧妙地联系在一起。在这种情况下,他们通过彼此的工作。我告诉你,我的目的并不是要完全复制那里的结构。这里的目标是展示如何制作一个基于模板的接口,该接口必须继承自被比较的一个类。这就是我在你身上看到的机制,我喜欢它。

 
Alexey Navoykov:
你的IComparer由于某种原因从Number继承而来,尽管它们是绝对不同的实体。

我在这里按基类对象的类型进行了编号,嗯,非常粗略,我没有设定目标,要在100行上呈现一个工作架构。但无论如何,一切都会从一个共同的祖先那里继承下来

 
Ilya Malev:

在这里,他们通过彼此的工作。

但它并没有这样做。 你不能从不同的实体中相互继承。 Number可以继承IComparable接口,它也可以在一个单独的方法中为其类型返回IComparer。
 
Alexey Navoykov:
Number可以继承IComparable接口,它也可以通过单独的方法为其类型返回IComparer。

Number并不是一个真正的数字,如果你注意到,它甚至没有一个值域。我只是叫它...好吧,如果对我有用的东西会成功,那么我会提出来讨论,但同时,如果我的例子根本不适合,就不要费心了。

 
Ilya Malev:

Number并不是一个真正的数字,如果你注意到,它甚至没有一个值域。我只是叫它...好吧,如果我最终得到了可行的东西,那么我会提出来讨论,但与此同时,如果我的例子根本不起作用,就别想了

好吧,但你应该考虑一下抽象方法,如果没有它们,看起来就非常不可靠。
原因: