MQL5Book/Scripts/p2/FuncTypedef.mq5
super.admin 1c8e83ce31 convert
2025-05-30 16:09:41 +02:00

79 lines
2.7 KiB
MQL5

//+------------------------------------------------------------------+
//| FuncTypedef.mq5 |
//| Copyright 2021, MetaQuotes Ltd. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link "https://www.mql5.com"
#property version "1.00"
typedef double (*Calc)(double, double);
Calc calc;
//+------------------------------------------------------------------+
//| Summation |
//+------------------------------------------------------------------+
double plus(double v1, double v2)
{
return v1 + v2;
}
//+------------------------------------------------------------------+
//| Subtraction |
//+------------------------------------------------------------------+
double minus(double v1, double v2)
{
return v1 - v2;
}
//+------------------------------------------------------------------+
//| Multiplication |
//+------------------------------------------------------------------+
double mul(double v1, double v2)
{
return v1 * v2;
}
//+------------------------------------------------------------------+
//| Calculation by arbitrary function pointer |
//+------------------------------------------------------------------+
double calculator(Calc ptr, double v1, double v2)
{
if(ptr == NULL) return 0;
return ptr(v1, v2);
}
//+------------------------------------------------------------------+
//| Function pointer selector |
//+------------------------------------------------------------------+
Calc generator(ushort type)
{
Calc local;
switch(type)
{
case '+':
return plus;
case '-':
return minus;
case '*':
return mul;
case '!':
return local; // warning: possible use of uninitialized variable
}
return NULL;
}
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
Print(calculator(plus, 1, 2)); // 3
Print(calculator(minus, 1, 2)); // -1
Print(calculator(calc, 1, 2)); // 0
Print(calculator(generator('*'), 1, 2)); // 2
Print(calculator(generator('!'), 1, 2)); // 0?
}
//+------------------------------------------------------------------+