mql5におけるOOP、テンプレート、マクロ、微妙な使い分け - ページ 17 1...101112131415161718192021222324...28 新しいコメント Taras Slobodyanik 2019.08.24 17:22 #161 Seric29: さて、以下はサンプルコードです。 マクロ置換とは、defineの中にあるすべてのコードを、プログラム中の指定された場所で毎回置換することを意味します。だから実は、関数を作ってそれを呼び出すのではなく、コードの中にこの関数を何度もコピーして、コードの一部分として使うのです。 また、マクロからリターン する場合は、このマクロが挿入されているコード全体からリターン することになります。 Seric29 2019.08.24 17:55 #162 Taras Slobodyanik: マクロ代入とは、プログラム中の指定された場所に、(defineにある)すべてのコードを毎回代入することを意味します。実は、関数を作ってそれを呼び出すのではなく、コードの中にこの関数を何度もコピーして、コードの一部とするのです。 また、マクロからリターンを 行うと、そのマクロが挿入されているコード全体からリターンが 行われます。 マクロ関数を書けないことが判明。 Taras Slobodyanik 2019.08.24 18:52 #163 Seric29: マクロ関数の書き方がないことが判明。 マクロ置換は、あるテキストを(ソースコード内で)別のテキストに置き換えることであり、定義上、関数にはなり得ません。 Seric29 2019.08.25 21:22 #164 このhttps://www.mql5.com/ru/forum/160683/page945#comment_12958065(番号9448)についてのご意見をお書きください。 Seric29 2019.09.10 22:37 #165 どのように新しい行に ジャンプせずに2つのマクロを記述する それは大幅に行数を増加させ、大幅にプログラムを長くする、以下はその例です。 #define I int #define B bool//это просто пример ни в коем случае не воспринимайте всерьёз マクロBが効かなくなった。 Igor Makanu 2019.09.28 23:35 #166 は、変数名を文字列に変換することができますか? そういうわけにはいきません。 #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 } Dmitry Fedoseev 2019.09.29 03:26 #167 Seric29: makros(a) というマクロを作りたいのですが、a が 1 なら int 型の値、2 ならdouble 型の 値、3 なら bool 型の値を返すというような動作をします。このようなことは可能でしょうか? 何のために?何のために?どこで使うのですか? fxsaber 2019.09.29 07:02 #168 Igor Makanu: は、変数名を文字列に変換することができますか? #define p_func(NAME) Print("This is " + #NAME) 削除済み 2019.09.29 08:56 #169 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; // ... Igor Makanu 2019.09.29 13:10 #170 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 } //+------------------------------------------------------------------+ 効いてる効いてる ありがとうございました。 1...101112131415161718192021222324...28 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
さて、以下はサンプルコードです。
マクロ置換とは、defineの中にあるすべてのコードを、プログラム中の指定された場所で毎回置換することを意味します。だから実は、関数を作ってそれを呼び出すのではなく、コードの中にこの関数を何度もコピーして、コードの一部分として使うのです。
また、マクロからリターン する場合は、このマクロが挿入されているコード全体からリターン することになります。
マクロ代入とは、プログラム中の指定された場所に、(defineにある)すべてのコードを毎回代入することを意味します。実は、関数を作ってそれを呼び出すのではなく、コードの中にこの関数を何度もコピーして、コードの一部とするのです。
また、マクロからリターンを 行うと、そのマクロが挿入されているコード全体からリターンが 行われます。
マクロ関数を書けないことが判明。
マクロ関数の書き方がないことが判明。
マクロ置換は、あるテキストを(ソースコード内で)別のテキストに置き換えることであり、定義上、関数にはなり得ません。
どのように新しい行に ジャンプせずに2つのマクロを記述する それは大幅に行数を増加させ、大幅にプログラムを長くする、以下はその例です。
マクロBが効かなくなった。
は、変数名を文字列に変換することができますか?
そういうわけにはいきません。
makros(a) というマクロを作りたいのですが、a が 1 なら int 型の値、2 ならdouble 型の 値、3 なら bool 型の値を返すというような動作をします。このようなことは可能でしょうか?
何のために?何のために?どこで使うのですか?
は、変数名を文字列に変換することができますか?
a が 1ce に等しい場合、マクロは int 型の値を返し、a が 2ke に等しい場合、マクロはdouble 型の 値を返し、a が 3ke に等しい場合、マクロは bool 型の値を帰す、というように動作するマクロ makros(a) を作りたい。このようなことは可能でしょうか?
µlでは、GET_EXPANDはなくても大丈夫ですが、µl特有のものなので、その方が正しいです。さて、μlマクロはカンマ演算子がないため、(松葉杖をつきながらも・・・)非常に制限されています。
ZZY:そしてもちろん、すべてコンパイル時です。
ZZZY:ちなみに、ゴーストオペレーターがあれば、こんなこともできるんですよ。
効いてる効いてる
ありがとうございました。