MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 406

 
RomanRott:

パラメータ数が可変の関数を書くには?

関数のいくつかのパラメータを初期値に設定することができます(これらのパラメータは最後のものでなければなりません)。関数が 呼び出されたとき、これらのパラメータは必要に応じて設定されたりされなかったりする。パラメータが明示的に設定されない場合は、初期値が設定される。

2つ目の選択肢は、オーバーロードです。同じ名前の関数を、パラメータの型や数だけを変えて書くだけです。

 
Artyom Trishkin:

例えば?


関数に複数のパラメータを渡す必要があるが、状況に応じて、あらかじめ知っている別の数を渡す必要がある。
という関数で、これらのパラメータを処理します。

C言語では、例えば次のように実装されています。

int func(int a, int b, ...)
 

MetaEditorのツールバーに「Undo」ボタンを設置する方法はありますか?
(Ctrl+Zを実装しているもの)

 
RomanRott:

関数に複数のパラメータを渡す必要があるが、状況に応じて、あらかじめ知っている別の数を渡す必要がある。
という関数で、これらのパラメータを処理します。

C言語では、例えば次のように実装されています。

int func(int a, int b, ...)

配列と、配列から取得するパラメータの数を渡す

 
STARIJ:

配列と、配列から取得するパラメータの数を渡す

つまり、私が渡すべき番号は順番が違う、つまり普遍的なものは生成できないのです
 
RomanRott:
つまり、私が渡すべき番号は順番が違う、つまり普遍的なものは生成できないのです。
せめて、抽象的でない例を一つでも挙げてください。
 
Artyom Trishkin:
せめて抽象的でない例を一つでも挙げてください。

例えば、こんな感じです。
条件によって(not ifですが、基本的には自分で書いています。)

a = func(digit, 10, 18, 42); または a = func(digit, 11, 18, 42, 15, 13); または a = func(digit, 5);


double func(int num, ??????)
{

return("sum of these parameters"/num);

}

 
RomanRott:

このように
条件によって(not if, でも基本的には自分で書いている)

a = func(digit, 10, 18, 42); または a = func(digit, 11, 18, 42, 15, 13); または a = func(digit, 5)です。


double func(int num, ?????)
{.

return("sum of these parameters"/num);

}

そこで、最初に思いついたのが、すでにここで提案したように、関数に配列doubleを渡し、関数内で渡された配列の値から必要な値を計算することで、数の量(配列サイズ)を知ることも、それに応じた関係の計算も可能になる、ということでした。計算式だけは、どのようなサイズの配列でも同じになります。計算式も変更するのであれば、配列だけではうまくいきませんので、もうひとつパラメータを作って、正しい計算式を指定する必要があります。例えば、計算式の種類を示す列挙型(ENUM_TYPE_CALCULATED)を渡して、この列挙型の値、例えばCALCULATE_SUMMに基づいて、(この例では)渡された配列のすべての値の合計を計算するだけでよいのです。

 
RomanRott:
つまり、そこに渡すべき数字は順番が違う、つまり普遍的なものが形成されないのです

ここで、本格的な回答ですが、回答はありません・・・。

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

MQL4に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。

アレクセイ・コジツィン さん 2018.01.05 11:46

いくつかの関数パラメータに初期値を設定することができます(これらのパラメータは最後のものであるべきです)。関数を呼び出す際に、必要に応じてこれらのパラメータを設定したりしなかったりします。パラメータが明示的に設定されていない場合、それらは初期値を取得します。

2つ目の選択肢は、オーバーロードです。同じ名前の関数を、パラメータの型や数だけを変えて書くだけです。


 
Alexey Viktorov:

ここで本格的な答え合わせをするが、それに対する回答がない...。


あらかじめ集合と個数がわかっていない場合、新しい集合のたびに関数は存在しない。