Function 有没有什么方法可以声明一个函数,它既可以接受int,也可以接受double';MQL4中的参数?

Function 有没有什么方法可以声明一个函数,它既可以接受int,也可以接受double';MQL4中的参数?,function,types,mql4,metatrader4,mql5,Function,Types,Mql4,Metatrader4,Mql5,我有两个功能: void CheckOneConditionInt( int &SettingsEditValueInt ); void CheckOneConditionDbl( double &SettingsEditValueDbl ); 它们的功能相同,但一个用于int值,另一个用于双值。有没有办法让它成为一个可以接受int/double作为参数的函数?例如: void CheckOneCondition( void &SettingsEditValue

我有两个功能:

void CheckOneConditionInt( int    &SettingsEditValueInt );
void CheckOneConditionDbl( double &SettingsEditValueDbl );
它们的功能相同,但一个用于
int
值,另一个用于
双值。有没有办法让它成为一个可以接受int/double作为参数的函数?例如:

void CheckOneCondition( void &SettingsEditValue );

附:这个例子当然不起作用。

你听说过方法重载吗?它在MQL4.5中使用。 因此,如果您传递int值,则调用
函数(int值)
,如果调用real,则调用
函数(双值)
。如果应用于这两种类型的算法相同-也许您可以跳过
函数(int-value)
,或者在integer函数中添加一个包装器,例如:

Function( int &value ){
   double tmp = value/1.0;       
   Function( tmp );
   value = ( int ) Normalize( tmp, 0 );
}

你听说过方法重载吗?它在MQL4.5中使用。 因此,如果您传递int值,则调用
函数(int值)
,如果调用real,则调用
函数(双值)
。如果应用于这两种类型的算法相同-也许您可以跳过
函数(int-value)
,或者在integer函数中添加一个包装器,例如:

Function( int &value ){
   double tmp = value/1.0;       
   Function( tmp );
   value = ( int ) Normalize( tmp, 0 );
}
是和否。 虽然新的-
MQL4.56789
扩展引入了类(其中有用于多个调用接口的方法(其中一个可以适用于
,另一个适用于
),这可能意味着是的),
MQL4
在其初始设计原则中是一种具有强类型的编译语言,
意思是


设计决策规则 一个合理而清晰的设计可以解决这个难题。在MQL4问题域中没有使用不明确的双类型调用接口的主要原因

除了一些理论实验外,传递给函数的值的类型始终是确定性的,因此,在MQL4的使用环境中,无定形的双(多)类型调用接口更不是一个学术主题


后记 如果有人真的寻求这种极为人为的极客来实现这种非确定性不可知论,那么让我们首先定义一个明确的MQL4域用例,对于这种用例,参数类型的不确定性是必要的,并且是其他可用手段无法避免的

是和否。 虽然新的-
MQL4.56789
扩展引入了类(其中有用于多个调用接口的方法(其中一个可以适用于
,另一个适用于
),这可能意味着是的),
MQL4
在其初始设计原则中是一种具有强类型的编译语言,
意思是


设计决策规则 一个合理而清晰的设计可以解决这个难题。在MQL4问题域中没有使用不明确的双类型调用接口的主要原因

除了一些理论实验外,传递给函数的值的类型始终是确定性的,因此,在MQL4的使用环境中,无定形的双(多)类型调用接口更不是一个学术主题


后记 如果有人真的寻求这种极为人为的极客来实现这种非确定性不可知论,那么让我们首先定义一个明确的MQL4域用例,对于这种用例,参数类型的不确定性是必要的,并且是其他可用手段无法避免的


通过使用模板解决了此问题:

template<typename T>
void CheckOneCondition( T &SettingsEditValue );
模板
无效检查条件(T&SettingsEditValue);

然后我可以将其称为传递
double
int
参数。

该问题通过使用模板解决:

template<typename T>
void CheckOneCondition( T &SettingsEditValue );
模板
无效检查条件(T&SettingsEditValue);

然后我可以将其称为passing
double
int
参数。

感谢使用包装器的想法。不过,我还是想知道MQL4/5是否为这个问题提供了一个更优雅的解决方案。人们应该意识到这个建议的短小精悍。传递
int
并不提供将分数传递给
Fun(int&byRef){…}
的处理部分的方法,这是对所提出想法的主要变形。反向设计通过
double
也可以将
int
-s类型转换为
double
的外部责任。尽管如此,正如我在回答中所指出的,并没有定义任何问题(并没有用例),这种人为的无定形行为将是其他可用的MQL4/5语法工具必须避免的。当然,如果有这样的情况,我会将其实现为
函数(double&value)
。我的用例相当简单。处理函数中的double和int的算法相同。所以重复两次是没有意义的。若你们不喜欢包装器,还有一种方法——使用泛型。不知道这里要展示什么,只需去看一个例子。还有其他方法可以指定要使用哪个函数,但我不记得如何找到它,也从未使用过它。希望“mql模板”是您所需要的。感谢您提出使用包装器的想法。不过,我还是想知道MQL4/5是否为这个问题提供了一个更优雅的解决方案。人们应该意识到这个建议的短小精悍。传递
int
并不提供将分数传递给
Fun(int&byRef){…}
的处理部分的方法,这是对所提出想法的主要变形。反向设计通过
double
也可以将
int
-s类型转换为
double
的外部责任。尽管如此,正如我在回答中所指出的,没有定义任何问题(没有用例),在这些问题中