mql5言語の特徴、微妙なニュアンスとテクニック - ページ 113

 
pavlick_:

私の解答が悪いとは思えませんので、ここにも書いておきますね。

なぜなら、もともと「どうやるか見てください」というパフォーマンスで、事前に考えていた通りの解答が必要だったからです。そして、あなたのは演出に合わなかった。

しかし、ドキュメントによると、パラメータの計算順序が保証 されていないことは、ディレクターも考慮に入れていませんでした

 
A100:

しかし、「ドキュメント」によると、パラメータの計算順序が保証 されていないことは、ディレクターも考慮に入れていなかった。

公平を期すために、MQLのドキュメントには このことが記述されています。

備考

つまり、最新のパラメータが最初に計算 されて渡され、次に最後尾のパラメータが渡されるというように、パラメータは関数に逆順に渡されることを覚えておく必要があります。オープニングブラケットの後に最初に来るパラメータは、最後に計算 されて送信されます。

これはC++の観点からは確かにおかしいのですが、MQLで文書化されたルールであれば、将来的にコードを移植する予定がないのであれば、大丈夫なのかもしれません。そして、その場合は、#ifdef __MQL__を確認することで、ここを確保することができます。

 
A100:

パラメータの計算順序は保証さ れません

確かに、保証はされませんね。 なんて矛盾したMQLなんでしょう))

 
Alexey Navoykov:

今、リンク先に目を通しましたが、確かに保証されていませんね。 なんて物騒なMQLなんでしょう))

x32逆引きでは(保存されると思います)、スタックに直接リンクがあるので。x64では逆の意味で意味がなく、それだけに将来的な保証もないのですが......。しかもそこそこ不自然に見える

最適化の有無で順位が変わっても驚かない

 

提供されたすべてのオプションに対して、「ありがとうございます」と言いたい。現実的な問題の解決に建設的に貢献したことになる。


となるとうまくいかないということがよくわかるタスクでした。 空虚TimeCurrent()は 失敗します。現状のボイドは、様々なものを不自由にさせることができる。

 

親メソッドを呼び出したい

以下は、そのコードですが、何か間違っているのでしょうか?

//+------------------------------------------------------------------+
class A
  {
public:
   virtual int Test_A()
     {
      return 100;
     }
  };
//+------------------------------------------------------------------+
class B :public A
  {
public:
   virtual int Test_A()
     {
      return 200;
     }
  };

B b;
//+------------------------------------------------------------------+
void OnStart()
  {
   Comment (A::b.Test_A());
  }
//+------------------------------------------------------------------+


 
Vladimir Pastushak:

親メソッドを呼び出したい

のように、正しい構文は次のようになります。

b.A::Test_A()

が、mqlには正解も不正解もないのです。

もしある関数が派生関数から呼ばれる必要があるなら、なぜその関数を基底の仮想関数に 置くのでしょうか?

 

fxsaber:

ということがよくわかる課題でした。 空虚 TimeCurrent()を呼び出しても、何も動作しない。今の形のボイドは、いろいろなものを切断することができるんです。

一目でわかる。

#define  MACROSV(NEW_HANDLE_, VOIDFN_) \
do{                                   \
   int prev=GetHandle();              \
   if(SelectHandle(NEW_HANDLE_))      \
      VOIDFN_;                        \
   SelectHandle(prev);                \
}while(false)

2マクロはあまり痛くないようです。μlの力で、もっとエレガントなものが、思い浮かばないのです。

 
pavlick_:

頭から離れない。

なぜ...whileなのか? 中括弧だけで十分です。
 
Alexey Navoykov:
なぜ...whileなのか? 中括弧だけで十分です。

それを実現するために

if(...)
   MACROSV(...);
else
{
}
理由: