作为示例,请考虑以下假设情况,其中函数( myFunc )接收2个整数( a 和 b )并对其进行处理 . 除了对参数进行的比较类型之外,处理步骤类似 . 我们通过提供 myFunc 用于比较的正确工具来解决这个问题 .
#include <iostream>
using namespace std;
bool comp1(int a, int b) {
return a > b;
}
bool comp2(int a, int b) {
return a < b;
}
void myFunc(int a, int b, bool (*myComp)(int, int)) {
bool res = myComp(a, b);
cout << "value : " << res << endl;
}
int main()
{
myFunc(1, 2, comp1); //use >
myFunc(1, 2, comp2); //use <
return 0;
}
编码MQL4你没有指向函数/模板的指针 . MQL5有模板,但形式参数类型是 only built-in or basic user-defined types .
你可以尝试类似的东西:
enum COMPARATOR
{
C_EQUAL = 0,
C_LESS = 1,
C_GREATER = -1
C_AT_MOST = 2,
C_AT_LEAST = -2,
};
bool cmp(int a, int b, COMPARATOR c)
{
switch (c)
{
case C_LESS: return a < b;
case C_AT_MOST: return a <= b;
case C_EQUAL: return a == b;
case C_AT_LEAST: return a >= b;
case C_GREATER: return a > b;
}
Alert("INTERNAL ERROR: UNKNOWN COMPARISON");
return false;
}
void a_function(COMPARATOR c)
{
if (cmp(MathRand(), 13, c))
Print("BOOM");
// *** If you need the "opposite" of c *** you can write:
if (cmp(Time[0], Time[1], COMPARATOR(-c))
Alert("DONE");
}
3 回答
传入"comparator"作为函数或函子,在这种情况下,我使用的是functional头中定义的std::less和std::greater仿函数,为所有运算符或多或少定义了仿函数 .
输出:
您可以为所需的每个比较创建一个比较器函数,然后将右函数作为参数传递给longish代码块(包含在一个适当定义的函数中)
作为示例,请考虑以下假设情况,其中函数(
myFunc
)接收2个整数(a
和b
)并对其进行处理 . 除了对参数进行的比较类型之外,处理步骤类似 . 我们通过提供myFunc
用于比较的正确工具来解决这个问题 .显然,
comp1
和comp2
是两种不同的比较器 . 我们将其中一个传递给myFunc
,具体取决于要求(<
或>
) .最好的事情是你的比较现在可以像你想要的那样复杂,并且
myFunc
对复杂性一无所知 .编码MQL4你没有指向函数/模板的指针 . MQL5有模板,但形式参数类型是 only built-in or basic user-defined types .
你可以尝试类似的东西:
它不优雅但有效 .