打字问题 - 页 6

 
在我印象中,C#不是mql的好朋友。
 
Ilya Malev:
在我印象中,C#与mql不是好朋友。

https://www.mql5.com/ru/forum/285631

10.MQL5: 增加了对具有 "智能 "函数导入的.NET库的本地支持。现在,你可以使用.NET库,而不需要编写特殊的包装器--MetaEditor负责这些。

Новая версия платформы MetaTrader 5 build 1930: Плавающие окна графиков и .Net библиотеки в MQL5
Новая версия платформы MetaTrader 5 build 1930: Плавающие окна графиков и .Net библиотеки в MQL5
  • 2018.10.25
  • www.mql5.com
26 октября 2018 года будет выпущена обновленная версия платформы MetaTrader 5...
 
不叫用C#来写。只是,隐性转换的好处是值得怀疑的(imho,糖,没有了),它不会增加战略的盈利能力。如果有人能解释为什么在编码策略时有如此大的帮助,我将很高兴能学到新的东西。
 
Vasiliy Sokolov:
它不会增加战略的盈利能力。

在讨论编程技术时提到策略的盈利能力是相当令人沮丧的。

瓦西里-索科洛夫
如果有人能解释为什么它对编码有如此大的帮助--我很高兴能学到新东西。

你甚至不能正确制作你自己的多维数组。更不用说一个有不同类型值的数组了。你甚至不能只用一个来做,因为这样的代码不适合于mql。

  Array array;

  double d=123.456;

  array[5]=d;

  d=array[5];

当然,你可以写d=array[5].to_double(),假装它应该是这样,并为你的丑陋代码感到高兴。但是如果允许类型转换操作的重载,几乎没有人愿意用这种方式来写d=array[5]。

 
Ilya Malev:

...

当然,你可以写d=array[5].to_double(),假装这是对的,并为你的错误代码感到高兴。但是如果允许类型转换操作的重载,几乎没有人会喜欢这种写d=array[5]的方式。

直截了当。d=array[5] 可以。

template <typename T>
class MainArray
{
private:
   T m_items[];
   int m_curr;
public:
   MainArray()
   {
      ArrayResize(m_items, 16);
      m_curr = 0;
   }
   void Add(T item)
   {
      m_items[m_curr++] = item;
   }
   T operator[](int index)
   {
      return m_items[index];
   }
};
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   MainArray<double> array;
   array.Add(123.456);
   double v = array[0];
   printf((string)v);
}

如果你变得书呆子,Array[3]=4.00123;仍有困难,但它是可读的,而且很好。

 
Vasiliy Sokolov:

对。d=array[5]就可以了。

如果你觉得无聊,那么用array[3]=4.00123;就有困难了,但它的可读性很强,也足够好。

是的,d=array[5]就可以了。但这样你就不能让array[5]=d。但你可以用%=代替=。没问题,同时,图标会提醒我们一切是通过什么地方完成的))

 
Ilya Malev:

是的,d=array[5]可以。但这样你就不能使array[5]=d。但你可以用%=来代替=,没问题,而且图标会提醒你用哪个地方))

如果你真的想这样做,你可以这样做

#property strict

#include <TypeToBytes.mqh> // https://www.mql5.com/ru/code/16280

#define  PRINT(A) ::Print(#A + " = " + (string)(A));

void OnStart( void )
{
// Работа со стандартными типами
  color Color = C'241,248,255';

  PRINT(_R(Color)[(uchar)1])             // Green-составляющая цвета - 248

  _W(Color)[2] = (uchar)230;             // Записали по смещению 2 значение (uchar)230.
  PRINT(Color)                           // Убедились, что Color теперь C'241,248,230'

// Работа со строками
  string Str = "abcd";

  _W(Str)[2] = "98765";                  // Побайтовая запись строки в строку со смещением 2
  PRINT(Str)

  string StrArray[] = {"123", "45", "6789"};
  _W(Str) = StrArray;                    // Записали в строку строковый массив
  PRINT(Str)

  _W(Str)[3] = (uchar)0;                 // В байт со смещением 3 записали ноль, тем самым отбрезав строку (длина - 3 ANSI-символа (4 байта))
  PRINT(Str);
}

等。

 
pavlick_:

我一开始也很挑剔,但后来我想--我自己会找到它的用途。

大约三四年前,我要求提供一个小括号运算符和一个葡萄籽 运算符。

你问,也许你能做得更好。

 
真可惜,你不能在你的帖子上添加褒义词)。
 
Ilya Malev:

...

当然,你可以写d=array[5].to_double(),假装这是对的,并为你的错误代码感到高兴。但是如果允许类型转换操作的重载,几乎没有人会喜欢这种写d=array[5]的方式。

人们有什么问题))))哦,保佑我的生活

顺便说一下,写d=array[5].to_double()比d=(double)array[5]容易得多只要按一个点就行了但我们不是在寻找简单的方法...