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

 

就在昨天,我们还在讨论这个 关于抽象方法的bug,但今天我在我的代码中也遇到了同样的bug ) 我以前在基类中有非抽象的虚拟方法,所以我从继承类中引用它,然后我决定把这个方法变成抽象的,但编译器没有通知我它不再可引用。结果,递归错误是最讨厌的,也是最难发现的,而我却浪费了大量的时间。现在我认为,带有默认抽象方法体的功能 在这里将非常有用,至少在这个bug被修复之前。

 
Alexey Navoykov:

是的,为了尽可能方便地将苍蝇分配到肉片上,甚至没有人眨一下眼睛 )

如果赋值过程中把苍蝇带到了切糕上(或在不可能的情况下给出一个错误),那么就没有什么问题了。

阿列克谢-纳沃伊科夫

1.好吧,那么它只是A类。如果它的参数与该类的行为没有任何意义,为什么要声明一个模式?

2)这太麻烦了。将类型控制转移到执行阶段...你的代码将不得不调试多年

1. "只是A类 "不能包含一个没有其(类)参数化的任意类型的字段。如果没有我所描述的这些舞动,就不可能对一个通过引用和通过值的类参数进行统一处理。

2.你已经把它当做口头禅了--在这种情况下,绝对毫不含糊的记录保证F就是T,那就像没有第二个模板的记录一样。但是没有。又是 "我将花费数年时间进行调试"))))))

 
Ilya Malev:

1. "只是A类 "不能包含一个没有其(类)参数化的任意类型的域。如果没有我所描述的那些修补工作,就不可能通过引用和值来统一处理类参数。

2.你已经把它当成了口头禅--在这种情况下,绝对毫不含糊的记录保证F就是T,那就像没有第二个模板的记录一样。但是没有。又是 "我以后会花几年时间调试"))))))

你为什么要在这个主题中回复? 代码在一个地方,讨论在另一个地方...。)

1.是的,一切都可以用人来做,而且几乎不用跳舞。

struct __A
{
  template<typename T>
  void f(T&) { }  // Сюда структуры и классы
};

struct A : __A
{
  template<typename T>  
  void f(T) { }  // Сюда простые типы и указатели
};

2.这不是我所说的,但不要紧。

 
Alexey Navoykov:

你为什么要在这个主题中回答? 代码在一个地方,讨论在另一个地方。)

1.是的,一切都可以用人类的方式完成,而且几乎不用跳舞。

2.那里有别的东西,但这不是重点。

你还不是版主,无法确定在哪个主题中什么更合适。而且版主已经明确表示,关于功能的讨论不应该在功能分支本身进行,而应该在一个单独的分支,即这里。

在你的描述中,根本不清楚如何通过引用和T型值来统一引用一个类方法。我不知道你说的是什么意思,但这正是我在那里的意思。

 
Ilya Malev:

你还不是版主,要决定哪些主题更合适。而且版主已经明确表示,关于功能的讨论不应该在功能的分支中进行,而应该在一个单独的主题中进行,即这里。

因此,如果版主想移动它,那是一回事,但为什么要自己制造混乱呢? 比如说,我就没有意愿去翻阅这些主题。

 
Alexey Navoykov:

因此,如果版主想移动它,那是一回事,但为什么要自己制造混乱呢? 比如说,我就没有意愿去翻阅这些主题。

如果你知道版主会做这样的事情,最好是自己做,而不是等待版主来做。然而,讨论版主的行为也不是版主最喜欢的菜单之一,所以我们最好停止讨论。

 
Alexey Navoykov:
Сюда простые типы и указатели

顺便说一下,对于指针来说,用T*参数做一个单独的方法是合乎逻辑的,因为肯定不会产生混淆,好处是最常见的是处理指针与普通类型不同(有效性检查、删除等)。

 
Alexey Navoykov:

代码在一个地方,讨论在另一个地方

以下是代码。

template<typename T>
class A
 {
public:
  A* operator<<(T&p){ Print("<< &",typename(T)); return &this; }
  template<typename F>
  A* operator<<(F p){ Print("<< ",typename(F)); return &this; }
 };

其实除了这个条目,还有一个解决方案:用名字列出所有用值传递的简单类型,然后用&写一个模板方法,这样也不会有错误。这个选项适用于没有内在参数化的类

 
Ilya Malev:

如果你意识到版主很可能会这样做--与其等着版主来做,不如自己来做,这总是更好。然而,讨论版主的行为也不是版主最喜欢的菜单,所以我们最好停止讨论。

一个版主肯定不会把讨论分成不同的主题。 你可能很想连自己都禁掉,"不等版主来做"))
 
Ilya Malev:

如果你意识到版主很可能会这样做--与其等着版主来做,不如自己来做,这总是更好。但是,讨论版主的行为也不是版主最喜欢的菜单,所以我们最好还是停止讨论。

1.最好是马上开始谈论一些事情,这个 "事情 "的位置,而不是考虑主持人如何做。否则,一切都会变得模糊不清,变成两条线,现在,即使版主决定讨论应该在那里或那里,要正常移动讨论,保留帖子的顺序和意义,也是一件相当费力的事情。

2 讨论版主的行为并不是每一个喷嚏...这不是每个喷嚏,但如果你想公开挑战他,让他清理或安抚那些疯狂的人。如果你有意见,谁禁止你表达?也许你的意见是一个非常理性的建议,但你不敢说出来,以免落入版主不爱的菜单?所以那是胡说八道 :)

原因: