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

 
Vict:

課題が何なのか、そこを掘っているのかわかりませんが、一見すると別のアプローチに見えますね。

つまり、関数の任意の部分(私の場合、必ずしも配列充填とは 限りません)を置き換えて、必要に応じてインスタンス化することができるのです。

なんだかダサいですね。この配列は、関数に渡された数値で埋め尽くされるか、この値にシャッフルされるのだろう...。しかし、それは...

 
Dmitry Fedoseev:

ちょっとドギマギしますよね。一見するとコードを見て、こう思うでしょう。「配列には、関数に渡されたそれらの数値が入るのだろう」「その値にシャッフルされるのだろう」と......。しかし、それは...

感動しない、よし、パクリだ。

 
Vict:

あるアルゴリズムの中に、特定のタスクを解決するためのサブアルゴリズムを入れ、いわば「調整」することができるのです。本来は、仮想関数の アナログです。主なものは、あなたが自分自身に尋ねたことであり、今あなたは理由を知らない))、あなたはフレームワークを持っており、その中にループを配置します。

このフレームワークにコードを追加して、全体が結果を返すようにしたかったのですが、私のフレームワークはvoidとして動作するので、それを理解するために試行錯誤しています。 異なる次元の配列で動作させる必要があります。

 
Vict:

他の関数(ループ本体など)へのポインタを渡した関数を呼び 出す。

int for3(int a, int b, int c, void(*loop)()) {
        for(int i=0; i<a; i++)
                for(int j=0; j<b; j++)
                        for(int k=0; k<c; k++) 
                                loop();
        return 4;
}


mql4は関数へのポインタでは動作しません。

ここで、私が見つけたものを紹介します。

typedef int(*MyFuncType)(int,int);

int addition (int a, int b)
{ return (a+b); }

int subtraction (int a, int b)
{ return (a-b); }

int operation (int x, int y, MyFuncType myfunc)
{
   int g;
   g = myfunc(x,y);
   return (g);
}

int OnInit()
{
   int m,n;
   m = operation (7, 5, addition);
   n = operation (20, m, subtraction);
   Print(n);
   return(INIT_FAILED);  //just to close the expert
}
 
だから、すべてのマクロが値を返せるわけではない、誰がわかる?
 
Seric29:
だから、すべてのマクロが値を返せるわけではない、誰がわかる?

マクロから値を返すことは一切できません。マクロとは、あるコードの一部を別のコードに置き換えることです。

 
Dmitry Fedoseev:

マクロから値を返すことは一切できません。マクロとは、あるコードの一部を別のコードに置き換えることです。

なるほど、わかりやすい正解をありがとうございました。

 
マクロは三項演算子?: やカンマ演算子 (µl ではありません) に展開でき、そこから値を返せます。
 
Vict:
マクロは三項演算子?: やカンマ演算子 (µl にはない) に展開でき、そこから値を返すことができるのですが、そうではありません。

C++の三項演算子はより発展しており、条件が真であれば複数のアクションを実行することができますし、以前のようにmql4はメモリへのアクセスを閉じ、少なくとも10年間、開発者は大きな変更を加えず、注目すべき関数も作成していません(色とテキストで動作する関数があるだけで、他は何もありません - ただの愚かさです)。

 
マクロの引数数の8要素という制限を解除するには、どうすればよいですか。