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

 
Алексей Тарабанов:

你已经找到了一个创造它的方法。

你对某些事情感到困惑。
 
Ilya Malev:

你试图在初始化阶段使用一个类 的静态字段,而该类至少有一个实例被创建。在我看来,这是一种变态...这就是它的正常工作方式。

封装原则通常意味着这种字段应该是隐藏的,而不是公开的。

一个静态字段就是因为这个原因,它不依赖于有类的实例。 但如果你想先创建一个类的实例--好的,创建它,但只是在函数里面。 然后从它那里请求这个字段(直接或通过一个方法)--结果还是一样的。

 
Alexey Navoykov:
你对某些事情感到困惑。

不,我对任何事情都不感到困惑。

首先是全局级变量,然后是静态变量,最后是代码中出现的局部变量。

这个特殊的例子违反了文档中关于不要用函数初始化变量 的建议。对开发者来说,写这样的警告比解释哪里必须和不必须更容易。

从你的样品中去除静电,得到你想要的结果。

 
Алексей Тарабанов:

不,我对任何事情都不感到困惑。

首先是全局级变量,然后是静态变量,最后是代码中出现的局部变量。

这个特殊的例子违反了文档中关于 不要用函数初始化变量建议。对开发者来说,写这样的警告比解释哪里必须和不必须更容易。

从你的例子中去掉静态的东西,就可以得到理想的结果。

"文件的建议"))我对你感到惊奇。你真的还是不明白,是吗? 语言中存在着一个错误。开发人员自己也在谈论这个问题,并向你解释如何正确地打手鼓,以避免遇到这个错误。我确保一劳永逸地忘记这个错误。
 
Alexey Navoykov:

如果它是一个常量(全局可见性大多声明常量,如果代码很聪明的话),就没有其他选择。

关于黄色的一切,我有一个问题:为什么? 我已经想出了如何解决问题的办法。

这里,以免把你已经做的事情弄得一团糟。

 
Alexey Navoykov:
"文件建议"))我对你感到惊奇。你真的还没有抓住重点吗? 语言中存在着一个错误。开发人员自己也在谈论这个问题,并向你解释如何正确地打手鼓,以避免遇到这个错误。我确保一劳永逸地忘记这个错误。

你不能用一个函数来启动某个东西的价值。即使你真的想这样做。你不明白吗?

 
Alexey Navoykov:

一个静态字段是一个静态的,所以它不依赖于类的实例。 但是如果你想先创建一个类的实例,好的,创建它,但是只在函数里面。 然后从它那里请求这个字段(直接或通过方法)--结果又会是一样的。

那么,是程序化编程还是面向对象编程?为什么我们要在初始化之前的阶段执行与类无关的函数,并参考类型化的对象呢。我明白,答案是 "因为我觉得喜欢"。但如果我是一个开发者,我不会急于取消一切,跑去修复这个特殊的行为,因为这是一个相当边缘化的架构,此外,通过创建一个类的实例,问题很容易解决。当然,不是在函数内部。

 
Alexey Viktorov:

永远如此,以免把你已经造成的混乱弄得一团糟。

我已经做了,我一点也不后悔。 而你,似乎对用MQ强加的人为限制来约束自己感到非常高兴。 也许你是个受虐狂?)而你却如此执着地试图说服我这是一种方式。 这不是必要的,是被迫的。
 
Алексей Тарабанов:

你不能用一个函数来启动某个东西的价值。即使你真的想这样做。你不明白吗?

是的,我不明白,请解释。
 
Ilya Malev:

那么是程序化编程还是面向对象的编程?为什么突然间要在初始化前执行与类无关的功能,对于类型化的对象来说。我明白,答案是 "因为我觉得喜欢"。但如果我是开发者,我不会急于取消一切,跑去修复这个特殊的行为,因为这是一个相当边缘的架构,此外,这个问题很容易通过创建一个类的实例来解决当然,不是在一个函数里面

所以,按照我的理解,你是大规模使用全局变量 的支持者。 那么你和我就不太可能理解对方。

此外,函数本身可能是一个模板。和创建的实例,应该分别以相同的类型作为参数。

template<typename T>
int f()
{  
  A<T> a;
  return a.f();
}

你是做什么的?