У меня есть следующий код MQL4/5:
class MQL4 {
public:
static double Ask() {
MqlTick _tick;
SymbolInfoTick(_Symbol, _tick);
return _tick.ask;
// Overriding Ask variable to become a function call.
#define Ask MQL4::Ask()
}
};
void start() {
double ask = Ask; // line 14
};
Однако он не компилируется под MQL4 или MQL5 из-за ошибок:
> mql /s /mql5 Test.mqh
MQL4/MQL5 Compiler build 1162 (02 Jul 2015)
Test.mqh : information: Checking 'Test.mqh'
Test.mqh(14,16) : error 320: 'Ask' - too complex, simplify the macro
Test.mqh(14,16) : error 239: '::' - syntax error
Test.mqh(14,16) : error 239: '::' - syntax error
Test.mqh(14,16) : error 239: '::' - syntax error
Test.mqh(14,16) : error 239: '::' - syntax error
Test.mqh(14,16) : error 239: '::' - syntax error
Test.mqh(14,16) : error 239: '::' - syntax error
Test.mqh(14,16) : error 239: '::' - syntax error
Test.mqh(14,16) : error 149: unexpected token
Test.mqh(14,16) : error 149: ')' - unexpected token
Test.mqh(14,16) : error 157: 'MQL4' - expression expected
Test.mqh(14,10) : warning 31: variable 'ask' not used
: information: Result 11 error(s), 1 warning(s)
Те же ошибки с последней сборкой 1498.
По сути, это говорит о том, что макрос Ask
слишком сложный макрос. Хотя он отлично работает, когда я переименовываю метод Ask()
в GetAsk()
и обновляю определение макроса,
однако
я хотел бы понять
есть ли любое другое решение без его переименования.
Есть ли какой-либо синтаксис, с помощью которого я могу определить замену макроса, которая может понимать следующий макрос:
#define Ask MQL4::Ask()
без необходимости переименовывать его, сохраняя при этом в методе статического класса?