初学者的问题 MQL5 MT5 MetaTrader 5 - 页 179

 
Reshetov:

这不是一个指向自身的指针,而是一个与对象实现中的字段标识符相关的指针。

也就是说,在某些对象方法中可能有一个与字段相同标识符的局部变量,在这种情况下,你可以用它来区分指向对象字段的指针和指向局部变量的指针。

你可以用这个作为例子吗?
 
Barbarian2:
这可以用于什么目的? 你能给我一个例子吗?
这在类的构造函数 中最常使用,这样就不会编造新的标识符,因为正是在构造函数中,参数值被分配给对象字段。
 
Barbarian2:
你能举个例子吗?
class node
{
   public:
      void LinkWithNode(node* childNode)
      {
          if(CheckPoint(linkNode) != POINTER_INVALID)
             this.childNode = childNode;
      }
   private:
      node* childNode;
};

class LineNode : node
{
   public:
      LineNode(node* parentNode)
      {
         parentNode.LinkWithNode(GetPointer(this));
      }
};

在这种情况下,当创建一个LineNode时,你需要指定当前LineNode实例所属的父节点。然后,父节点将能够通过引用来引用这个实例。在这个例子中,这个词被使用了两次。在第一种情况下,this一词指定childNode变量特指当前类,而没有this的childNode是同名的LinkWithNode方法变量。在第二种情况下,这将返回该类的当前实例,而GetPointer则接收一个 指向它的指针。这允许你在创建的时候绑定一个LineNode。

 
C-4:

在这种情况下,当创建一个LineNode时,你需要指定当前LineNode实例所属的父节点。然后,父节点将能够通过引用来引用这个实例。在这个例子中,这个词被使用了两次。在第一种情况下,this一词指定childNode变量特指当前类,而没有this的childNode是同名的LinkWithNode方法变量。在第二种情况下,这将返回该类的当前实例,而GetPointer则接收一个指向它的指针。因此有可能在创建的时候就绑定LineNode。

也就是说,在第二种情况下,它将导致代码的减少?
 
Barbarian2:
即在第二种情况下,它将导致代码的减少?
不管用什么速记法(在这种情况下),你都是在关注错误的事情。 这方面的用法可以是多种多样的。重要的是要明白,在使用this的地方,this是对象实例的同义词。 当定义一个类时,当还没有this的实例时,这是告诉编译器程序员意思的唯一方法。
 
Barbarian2:
即在第二种情况下,它将导致代码的减少?

不,不是这样的。这使得我们可以控制一个已经在定义 中的类的实例。知道了这一点,我们就可以在一个特定的实例上施加我们自己的独特行为。这实现了高度的灵活性和抽象性。

 

一句话的建议。我从mql4转到5,我要为1000或10k缓冲区写一个指标。是否可以用变量来命名缓冲区?

喜欢

while( a<1000)

{

a++ B++

缓冲区名称=缓冲区+a

buff(a)=iMA(null, B,) }

而随后的缓冲区处理也是如此循环往复

或者任何其他方式来减少时间和代码的新mql5功能。

 
Andrei-1:

首先,限制是256个缓冲区(我可能是错的)。

缓冲区也是可以的,你可以把它们放在类中,给出别名并通过别名搜索。

 
谢谢你,我们会研究的。
 
Andrei-1:

在某处看到的文章tol64,我一眼就记不起来了,找找看吧。

TheXpert

首先,限制是256个缓冲区(我可能是错的)。

缓冲区的一切都很好,你可以把它们放到类中,给它们加别名,并通过别名进行搜索。

在帮助中没有限制"你可以在一个自定义指标中使用的指标缓冲区的数量是没有限制的。",但它确实在某个地方提到了512,所以我不知道。