void OnStart() // Способ 1. Параметров много, но им заданы предопределенные значения { Функция(11); Функция(22,33); Функция(33,44,55); Функция(77.11); } void Функция(int Парам1=1,int Парам2=2,int Парам3=3,int Парам4=4) { Alert(" Парам1=",Парам1," Парам2=",Парам2," Парам3=",Парам3," Парам4=",Парам4); } void Функция(double Парам1=77) // Способ 2 - Перегрузка { Alert(" Парам1=",Парам1); } // Способ 3 - передача параметров через массив + счетчик элементов в массиве
Я не про перегрузки функций, посмотрите на функцию Print, она не знает изначально сколько и какого типа параметров ей передадут. В C это реализовано через Va_arg, но насколько я понимаю реализовать это в mql никто не догадался
Можно вообще без аргументов обойтись, обрабатывать глобальные переменные.
Вы сами понимаете о чем речь? Или у нас принято операцию на горло делать через задний проход?
Присоединяюсь к вопросу. Необходимо написать функции на подобие Print. И ведь случайно натыкался на пример на этом сайте. .А сейчас не как не могу найти.
У Print() вовсе не неограниченный набор параметров. Их, вроде бы, 64. То есть тоже есть предел. В качестве аналога делаете функцию с таким же количеством параметров со значениями, заданными по умолчанию.
У Print() вовсе не неограниченный набор параметров. Их, вроде бы, 64. То есть тоже есть предел. В качестве аналога делаете функцию с таким же количеством параметров со значениями, заданными по умолчанию.
Я немного не это имел ввиду. Мне нужна функция которая обрабатывает произвольное количество параметров произвольных типов. Вот собственно сам проблемных участок кода.
string Simvol="EURUSD"; string Message; StringConcatenate(Message,Simvol," НЕТ КОТИРОВОК В СТАКАНЕ Ask=0 Bid=0"); Log.write(Message)
Мне нужно научить Log.write писать в файл произвольное количество параметров произвольных типов. Точно также как Print пишет в журнал. А сейчас как то не хорошо получается. Мне приходиться и переменную объявлять и фукцию для склеивания вызывать. Вообще как это очень длинно. Хочется вот так.
Log.write(Simvol," НЕТ КОТИРОВОК В СТАКАНЕ Ask=0 Bid=0");
Я немного не это имел ввиду. Мне нужна функция которая обрабатывает произвольное количество параметров произвольных типов. Вот собственно сам проблемных участок кода.
Мне нужно научить Log.write писать в файл произвольное количество параметров произвольных типов. Точно также как Print пишет в журнал. А сейчас как то не хорошо получается. Мне приходиться и переменную объявлять и фукцию для склеивания вызывать. Вообще как это очень длинно. Хочется вот так.
С чужой функцией сделать это будет сложно. А записать самостоятельно ничего не стоит.
Последовательность такая
Открыть файл для записи и чтения
Переместить указатель в конец файла
Запись 1
.........
Запись n
Всё...
StringFormat не порешит вашу проблему?
Log.write(StringFormat("...",...,...,...));При каждом конкретном вызове можете передавать "любое" число переменных любого типа, вставленных в произвольный текст
Я немного не это имел ввиду. Мне нужна функция которая обрабатывает произвольное количество параметров произвольных типов. Вот собственно сам проблемных участок кода.
Мне нужно научить Log.write писать в файл произвольное количество параметров произвольных типов. Точно также как Print пишет в журнал. А сейчас как то не хорошо получается. Мне приходиться и переменную объявлять и фукцию для склеивания вызывать. Вообще как это очень длинно. Хочется вот так.
что-же вы так мучаетесь :-)
log<<StringFormat("formatted message %d %d",10,11)<<0.55<<ChartID()<<log.flush
чем не вариант ?

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Господа разработчики, здравстуйте!
Подскажите пожалуйста, неужели нельзя реализовывать свои функции вида Func(int lala, ...) с неопределенным количеством аргументов. Так же как работают встроенные Print/FileWrite?
Очень этого не хватает, но в документации ничего подобного нет.