タイピングに関する質問 - ページ 6

 
私の記憶では、C#はmqlと仲が悪いです。
 
Ilya Malev:
私の記憶では、C#はmqlと仲が悪いです。

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

10.MQL5:「スマート」な関数インポートを持つ.NETライブラリのネイティブサポートを追加しました。MetaEditorは、特別なラッパーを書くことなく、.NETのライブラリを使用することができます。

Новая версия платформы MetaTrader 5 build 1930: Плавающие окна графиков и .Net библиотеки в MQL5
Новая версия платформы MetaTrader 5 build 1930: Плавающие окна графиков и .Net библиотеки в MQL5
  • 2018.10.25
  • www.mql5.com
26 октября 2018 года будет выпущена обновленная версия платформы MetaTrader 5...
 
C#で書くことを呼び出さない。ただ、暗黙の変換の利点は疑問である(イミフ、砂糖、これ以上ない)、それは戦略の収益性を増加させることはありません。ストラテジーをコーディングするときに、なぜこんなに役立つのか、説明できる人がいたら、新しいことを教えてほしいです。
 
Vasiliy Sokolov:
戦略の収益性を高めることはできない。

プログラミングの技術を論じながら、戦略の収益性に言及するのは、むしろ憂慮すべきことです。

ワシリー・ソコロフ
もし誰かが、なぜそれがコーディングにそれほど役立つのかを説明してくれるなら、私は喜んで新しいことを学ぼうと思います。

自分で多次元配列もまともに作れないくせに。ましてや、異なるタイプの値を持つ配列は。そのようなコードはmqlに収まらないので、1つだけではできないのです。

  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]はOK。でも、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_:

私も最初は批判的でしたが、自分でも使えると思ったんです。

3、4年前くらいに括弧演算子と鉤括弧 演算子をお願いしたことがあります。

と聞けば、もっとうまくできるかもしれない。

 
投稿にプラスを付けられないのが残念です)
 
Ilya Malev:

...

もちろん、d=array[5].to_double() と書いて、これが正しいということにして、自分のバグだらけのコードに満足することもできます。しかし、もし型変換操作のオーバーロードが 許されるのであれば、このd=array[5]の書き方を好む人はほとんどいないでしょう。

人が抱える問題とは)))ああ、私の人生に祝福を!

ちなみにd=array[5].to_double() と書くと、d=(double)array[5] よりもずっと簡単 です。ポイントを押すだけ です。しかし、安易な方法は求めていない...。