新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 406

 
RomanRott:

如何编写一个参数数量可变的函数?

你可以将一个函数的一些参数设置为初始值(这些参数应该是最后一个)。当函数被调用时,这些参数可以被设置或不设置,这取决于需要。如果参数不会被明确设置,它们将收到初始值。

第二个选择是超载。只需写一个同名的函数,只是参数的类型/数量不同。

 
Artyom Trishkin:

像什么?


我需要向一个函数传递几个参数,但在不同的情况下,我需要传递不同的数量,事先知道的是
然后在函数中处理这些参数

例如,在C语言中,它是这样实现的

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

有没有办法在MetaEditor的工具栏上加一个 "撤销 "按钮?
(实现Ctrl+Z的那个)。

 
RomanRott:

我需要向一个函数传递几个参数,但在不同的情况下,我需要传递不同的数量,事先知道的是
然后在函数中处理这些参数

例如,在C语言中,它是这样实现的

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

传递数组和要从数组中获取的参数数量

 
STARIJ:

传入一个数组和从数组中获取的参数数量

所以我需要传递的数字是不按顺序的,即不能生成一个通用的数字
 
RomanRott:
所以我需要传递的数字是不按顺序的,也就是说不能生成一个通用的数字。
至少给我一个不是抽象的例子。
 
Artyom Trishkin:
至少给我一个非抽象的例子。

比如说。
根据条件(不是如果,只是基本上,我自己写的这些数字)

a = func(digit, 10, 18, 42); 或a = func(digit, 11, 18, 42, 15, 13); 或a = func(digit, 5)。


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

返回("这些参数的总和"/num)。

}

 
RomanRott:

像这样:
根据条件(不是如果,只是基本上,我自己写的这些数字。)

a = func(digit, 10, 18, 42); 或a = func(digit, 11, 18, 42, 15, 13); 或a = func(digit, 5)。


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

返回("这些参数的总和"/num)。

}

那么,我首先想到的是,正如上面已经建议的那样--在函数中传递双倍数,在函数中从传递的数组值中计算出必要的值--这样就有可能知道数字的数量(数组大小),并相应地计算出它们的关系。只有公式在任何大小的数组中都会保持不变。如果你也要改变公式,那么仅仅是数组是不行的,你必须多做一个参数--它将指向正确的计算公式。例如,你可以传递一个表示公式类型的枚举(ENUM_TYPE_CALCULATED),根据这个枚举的值,例如CALCULATE_SUMM,只是计算(在这个例子中)传递的数组中所有值的总和。

 
RomanRott:
所以我需要传到那里的数字是没有顺序的,也就是说,不能形成一个普遍的数字

这里有一个完整的答案,但没有回应......

关于交易、自动交易系统和策略测试的论坛

新手对MQL4的任何问题,对算法和代码的帮助和讨论

Alexey Kozitsyn, 2018.01.05 11:46

你可以将一些函数参数设置为初始值(这些参数应该是最后一个)。当你调用该函数时,你将能够根据需要设置这些参数或不设置。如果参数没有明确设置--它们将获得初始值。

第二个选择是超载。只需写一个同名的函数,只是参数的类型/数量不同。


 
Alexey Viktorov:

这里有一个完整的答案,但没有回应......


如果事先不知道数字的集合和数量,就没有每个新集合的函数。