mql5におけるOOP、テンプレート、マクロ、微妙な使い分け - ページ 25

 
TheXpert:

指定子はオブジェクト全体ではなく、参照を参照しています。

おそらく、そうであれば、ここでお叱りを受けることはないでしょう。

void g1( A& ) {}
void g2( const A& ) {}

void OnStart()
{
  const A a;
  
  g1(a); // 'a' - constant variable cannot be passed as reference
  g2(a); // OK
}
 
fxsaber:

おそらく、そうであれば、ここで悪口を言うことはないでしょう。

これは定数オブジェクトであり、定数オブジェクトは 定数でない参照を持つことができないのは論理的なことである

 
TheXpert:

これは定数オブジェクトなので、定数でないオブジェクト は定数でない参照を持つことができないのは論理的な話です。

定数オブジェクトを 参照するにはどうしたらよいですか?

 
fxsaber:

定数オブジェクトを 参照するにはどうしたらよいですか?

void g1( A& ) {}
void g1(const A& ){}
void g2( const A& ) {}

void OnStart()
{
  const A a;
  
  g1(a);
  g2(a);
}

オーバーロードを追加する。

 
Vladimir Simakov:

追加するオーバーロード。

常時リンクでこのような過負荷はないのでしょうか?

 
fxsaber:

そのようなオーバーロードは、常に参照するものではないのでしょうか?

どうしたいですか?

 
fxsaber:

そのような過負荷は、定数参照では過負荷にならないのでは?

なぜなら、そこではすべてが合法だからです。参照によってオブジェクトのインスタンスを変更するのではなく、メソッドが呼び出されたオブジェクトのインスタンスを変更するのです。

クラスなら、この仕掛けができる(構造物なら、できない)。

class A
{
  int i;
public:
  void f( const A &Value )  
  {
    Print(Value.i); // 0
    
    if (&this!=&Value) this.i = Value.i + 1;
    
    Print(Value.i); // 1
  }
};

void OnStart()
{
  A a;
  
  a.f(a);
}
 
Vladimir Simakov:

もしあなたがコンパイラに最初の例をクラッシュさせたいのなら、それは無理でしょう。

合法性の問題ではなく、const修飾子はオブジェクトが変化しないことを保証するものではない、ということです。

 

トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

mql5でのOOP、テンプレート、マクロ、ヒントとトリック

fxsaber, 2020.02.25 22:23

この式がfalseを返すのを見たことがない。
ORDER_TIME_DONE_MSC == DEAL_TIME_MSC

そのため、取引履歴に基づく注文執行時間の統計が取りにくいのです。

成行注文の場合はまだORDER_TIME_SETUP_MSCの 値を比較できるとしても、保留注文の場合は意味がないのです。


トレーディング、自動売買システム、ストラテジーテストに関するフォーラム

ライブラリ:MT4Orders

fxsaber, 2020.02.27 09:40

0 - 348806: 00:01:57.311
1 - 348530: 00:01:39.027
2 - 348494: 00:01:15.259
3 - 348406: 00:01:07.671
4 - 348950: 00:01:04.869
5 - 348960: 00:01:02.888
6 - 348814: 00:01:00.654
7 - 348392: 00:01:00.642
8 - 348508: 00:00:54.515
9 - 348550: 00:00:54.467


実行中のアカウントで最大2分間の実行が可能です。あなたの統計情報をここで共有しましょう。このスクリプトは、ライブラリを使用しないので、Netting/Hedgingに適しています。

 

という疑問が湧いてきました。

New Bar」クラスと「Data Manager」クラスを使用する「Program」クラスがあります。New Bar "クラスは、"Data Manager "クラスも使用しています。パブリックゲッターとセッターは "Data Manager "クラスで実装されています。

class CDataManager
   {
private:
    string          m_symbol;
    ENUM_TIMEFRAMES m_timeframe;
public:
    //--- Геттеры и сеттеры
   };
class CNewBar
   {
private:
    CDataManager  m_data;
   };
class СProgram
   {
private:
    CNewBar        m_newBar;
    CDataManager   m_data;
   };

質問:「New Bar」クラスのプログラムの初期化で、「Data Manager」クラスの「symbol」「timeframe」プロパティを指定する際のオプションは何でしょうか?New Barクラスで、データマネージャフィールドにアクセスするためのパブリックゲッターとセッターを持ちたくは ありません。そして、データマネージャーを非公開にしたいと思います。

言い換えれば、アプリケーションは、データマネージャーを使用する複数のクラスを使用することができます。プログラムの初期化時に、すべてのクラスのすべてのマネージャフィールドを必要な値で初期化する必要があります。しかし、データマネージャーフィールドにアクセスするために、すべてのクラスでゲッターを作りたくはないのです。それで...

理由: