Передача каждого отдельного аргумента в конструктор, когда у вас есть 10 или более, утомительна и не очень удобна в обслуживании — также делает чтение аргументов конструктора довольно трудным делом.
Шаблон, который я хочу использовать, обычно используется в Ruby / Node / Python и надеется, что в MQL4 будет что-то похожее
Поэтому я хочу передать объект пары «ключ-значение» в конструктор со всеми аргументами.
К сожалению, я получаю —
struct cannot be defined in param list.
от компилятора.
Я всего лишь n00b на C, и это моя первая попытка программы MetaQuotes4 (EA). Я гуглил и трал документы. Не могу найти ничего кроме документов, говорящих, что прохождение классов, массивов и структур может быть сделано только с использованием передачи по ссылке.
Вопрос в строке 10.
он загружен с ошибками компиляции — потому что это WIP. Остальные ошибки, которые я могу обработать, но структура, не разрешенная в параметрах, приводят меня в замешательство. Любая помощь или совет будут потрясающими.
Может быть, есть альтернативный шаблон?
Заранее спасибо.
MQL4
во многих отношениях не похож C++
компиляторХотя синтаксические конструкторы могут выглядеть одинаково, реальное использование ограничено или запрещено в .MQL4
компиляция MetaLang.exe
компилятор.
Так, struct
выглядеть многообещающе, но не будет соответствовать вашему желанию.
Как изображено на вашем принт-экране,
...
string symbol = params.symbol;
...
вы планируете включить также string
введенные в вас значения struct
,
Хотя это возможно, MQL4
документация однако подразумевает ограничения для таких struct
использование и единственная форма struct
, что разрешено безопасно использовать при передаче параметров вызова функции просто ПРОСТАЯ СТРУКТУРА, то есть struct
без какой-либо строковой составляющей (после многих лет, проведенных в MQL4
домен, вы бы подготовленный для похожих специальности. Некоторые из которых включают в себя string
который внутренне не string
, но struct
и этот кошмар только начался … (и вы можете представить, что это навязывает вашему интерфейсу DLL и т. д.).
Название структуры не может использоваться в качестве идентификатора (имя переменной или функции).
или же
Следует отметить, что в структуре MQL4 элементы следуют друг за другом прямо, без выравнивания.
В C ++ такой порядок делается для компилятора с помощью следующей инструкции:
#pragma pack(1)
Если вы хотите сделать другое выравнивание в структуре, используйте вспомогательные элементы, «заполнители» до нужного размера.
а также
С
return
оператор ты не может возвращать любые массивы, объекты классов, переменные типа составной структуры.
Так что будьте осторожны и прочитайте документацию по MQL4 от начала до конца, так как некоторые «особенности» скрыты в местах, вряд ли их можно ожидать априори.