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

 
Seric29:

さて、以下はサンプルコードです。

マクロ置換とは、defineの中にあるすべてのコードを、プログラム中の指定された場所で毎回置換することを意味します。だから実は、関数を作ってそれを呼び出すのではなく、コードの中にこの関数を何度もコピーして、コードの一部分として使うのです。

また、マクロからリターン する場合は、このマクロが挿入されているコード全体からリターン することになります。

 
Taras Slobodyanik:

マクロ代入とは、プログラム中の指定された場所に、(defineにある)すべてのコードを毎回代入することを意味します。実は、関数を作ってそれを呼び出すのではなく、コードの中にこの関数を何度もコピーして、コードの一部とするのです。

また、マクロからリターンを 行うと、そのマクロが挿入されているコード全体からリターンが 行われます。

マクロ関数を書けないことが判明。

 
Seric29:

マクロ関数の書き方がないことが判明。

マクロ置換は、あるテキストを(ソースコード内で)別のテキストに置き換えることであり、定義上、関数にはなり得ません。

 
このhttps://www.mql5.com/ru/forum/160683/page945#comment_12958065(番号9448)についてのご意見をお書きください。
 

どのように新しい行に ジャンプせずに2つのマクロを記述する それは大幅に行数を増加させ、大幅にプログラムを長くする、以下はその例です。

#define  I int #define  B bool//это просто пример ни в коем случае не воспринимайте всерьёз

マクロBが効かなくなった。

 

は、変数名を文字列に変換することができますか?

そういうわけにはいきません。

#define  p_func(NAME)  Print("This is ##NAME")
//+------------------------------------------------------------------+
void OnStart()
{
   int QWERTY;
   int zxcvbn;
   p_func(QWERTY);	//This is ##NAME
   p_func(zxcvbn);	//This is ##NAME
}
 
Seric29:
makros(a) というマクロを作りたいのですが、a が 1 なら int 型の値、2 ならdouble 型の 値、3 なら bool 型の値を返すというような動作をします。このようなことは可能でしょうか?

何のために?何のために?どこで使うのですか?

 
Igor Makanu:

は、変数名を文字列に変換することができますか?

#define  p_func(NAME)  Print("This is " + #NAME)
削除済み  
Seric29:
a が 1ce に等しい場合、マクロは int 型の値を返し、a が 2ke に等しい場合、マクロはdouble 型の 値を返し、a が 3ke に等しい場合、マクロは bool 型の値を帰す、というように動作するマクロ makros(a) を作りたい。このようなことは可能でしょうか?
#define  GET_HELPER_1 1
#define  GET_HELPER_2 1.0
#define  GET_HELPER_3 true
#define  GET_EXPAND(I) GET_HELPER_##I
#define  GET(I) GET_EXPAND(I)

void OnStart() {
   Alert(GET(1), "  ", GET(2), "  ", GET(3));
}

µlでは、GET_EXPANDはなくても大丈夫ですが、µl特有のものなので、その方が正しいです。さて、μlマクロはカンマ演算子がないため、(松葉杖をつきながらも・・・)非常に制限されています。

ZZY:そしてもちろん、すべてコンパイル時です。

ZZZY:ちなみに、ゴーストオペレーターがあれば、こんなこともできるんですよ。

class Q{
public:
        operator int();
        operator double();
        operator bool();
};
...
Q q;
int i = q;      // call operator int
double d = q;   // call operator double
bool b = q;     // ...
 
fxsaber:
#define  p_func(NAME)  Print(#NAME " = " ,NAME)
//+------------------------------------------------------------------+
void OnStart()
{  int QWERTY=100;
   int zxcvbn=999;
   p_func(QWERTY);   // QWERTY = 100
   p_func(zxcvbn);   // zxcvbn = 999

}
//+------------------------------------------------------------------+

効いてる効いてる

ありがとうございました。