Нет такой возможности.
Можно выйти из положения следующим образом: не передавать все параметры сразу, а передавать их по одному. Лучше сделать в виде класса с тремя методами. Вызов одного метода означает начало добавления данных в массив, второй метод используется для добавления одного значения (вызывается несколько раз), третий метод - для окончания добавления. Примерно так.
Как я вижу варианты следующие:
1. Объявить функцию с максимальным числом параметров, задав их по умолчанию таким значением, которое не может быть передано. Соответственно, при вызове - передаешь только необходимое число, остальные - принимают значения по умолчанию. Внутри функции - проверяешь, сколько реально передано значений.
2. Передавать параметры внутри динамического массива.
3. Передавать параметры в специальном классе-контейнере, который знает число и тип параметров. Лично я использую последний случай (для передачи параметров различных индикаторов), он хорош тем, что параметры могут быть самыми разными. Более того, я передаю в функцию базовый класс-интерфейс, где все функции получения параметров виртуальны, а их реализация - уже зависит от конкретного набора параметров, необходимых для данного индикатора..
К примеру есть примитивная запись
В данной записи объявлены аргументы int q1,int q2,int q3. При расчётах так получилось что нужно использовать алгоритм этой функции, но количество параметров типа int уже больше. Значения этих параметров будут передаваться в массив и использоваться непосредственно в программе. Что можно сделать в этом случае?
Ну отсюда возникает второй вопрос каким способом можно узнать сколько у функции аргументов в моём случае четыре (bool Er,int q1,int q2,int q3)? Как провести проверку и узнать сколько у функции параметров. Просьба не грубить я конечно валенок но мне очень нужны подобные свойства для написания программ. Возможно ли что-то из этого реализовать? Вот у меня есть пример кода.
Правда код этот не из mql4. Что можно сделать чтобы реализовать подобное и возможно ли это?
Примерно так
int Funk(bool Er,int q1,int q2,int q3) {return 0;} int Funk(bool Er,int q1,int q2,int q3,int q4) {return 0;} int Funk(bool Er,int q1,int q2,int q3,int q4,int q5) {return 0;} int Funk(bool Er,int q1,int q2,int q3,int q4,int q5,int q6) {return 0;}
Дальше сколько параметров передаёшь в функцию при её вызове, та функция и работает. Это самое простое.
Либо можно организовать класс и сделать перегрузку уже пограмотней.
зависит от желания создать сложную конструкцию и поставленных задач
если нет желания или возможностей делать универсальный сложный код, то используйте глобально описанные переменные и в функцию "с наращиваемым количеством аргументов функции" просто передавайте некую команду которую потом будете анализировать в теле функции, а сами переменные используйте из глобальной области видимости
ЗЫ: нужно понимать, что если бы все исходники на разных языках программирования могли бы портироваться "в 2 клика" без потери функциональности или усложнения кода, тогда не было бы такого изобилия языков - это просто не нужно
Как я вижу варианты следующие:
1. Объявить функцию с максимальным числом параметров, задав их по умолчанию таким значением, которое не может быть передано. Соответственно, при вызове - передаешь только необходимое число, остальные - принимают значения по умолчанию. Внутри функции - проверяешь, сколько реально передано значений.
2. Передавать параметры внутри динамического массива.
3. Передавать параметры в специальном классе-контейнере, который знает число и тип параметров. Лично я использую последний случай (для передачи параметров различных индикаторов), он хорош тем, что параметры могут быть самыми разными. Более того, я передаю в функцию базовый класс-интерфейс, где все функции получения параметров виртуальны, а их реализация - уже зависит от конкретного набора параметров, необходимых для данного индикатора..
1ый вар. я реализовал но минус его в том что происходят лишние проверки.
2ой вар. тут получается в принципе всё нормально но если объявить массив глобально то приходится разрывать условие if заполнять массив потом заходить опять в логич. условие if и уже дальше доделывать работу это тоже не удобно лишние проверки но работать с динамическим массивом очень удобно можно сразу обращаться к нужному размеру в цикле. Было бы класно если бы можно было заполнить динамический массив данными без разрыва логического условия.
3ий вапр. в классах я валенок сколько я их не изучал так и не понял их сути, я только понял что оин данные объединяют но какой в этом толк и чем они отличаются от фабричной функции я так и не понял.
зависит от желания создать сложную конструкцию и поставленных задач
если нет желания или возможностей делать универсальный сложный код, то используйте глобально описанные переменные и в функцию "с наращиваемым количеством аргументов функции" просто передавайте некую команду которую потом будете анализировать в теле функции, а сами переменные используйте из глобальной области видимости
ЗЫ: нужно понимать, что если бы все исходники на разных языках программирования могли бы портироваться "в 2 клика" без потери функциональности или усложнения кода, тогда не было бы такого изобилия языков - это просто не нужно
Я охотно использую глобальные переменные иногда даже приходиться создавать функцию которая и обеспечивается как раз таки глобальной переменной, но если объявить массив глобально то приходится разрывать условие if заполнять массив потом заходить опять в логич. условие if и уже дальше доделывать работу это тоже не удобно нельзя же так сделать:
if(q==5&& ww==2||ty=5;Fun()){}
int ty=0,qw=0;if(ty==0||(qw=5&&qw!=0)){} так тоже нельзя
1ый вар. я реализовал но минус его в том что происходят лишние проверки.
2ой вар. тут получается в принципе всё нормально но если объявить массив глобально то приходится разрывать условие if заполнять массив потом заходить опять в логич. условие if и уже дальше доделывать работу это тоже не удобно лишние проверки но работать с динамическим массивом очень удобно можно сразу обращаться к нужному размеру в цикле. Было бы класно если бы можно было заполнить динамический массив данными без разрыва логического условия.
3ий вапр. в классах я валенок сколько я их не изучал так и не понял их сути, я только понял что оин данные объединяют но какой в этом толк и чем они отличаются от фабричной функции я так и не понял.
1-2. Если ты хочешь функцию с переменным числом параметров - проверки в любом случае будут нужны. Просто в случае параметров, ты проверяешь сами параметры, в случае массива - проверяешь массив.
3. Это ООПшная фишка. Главная польза от классов - в связи данных и функций, их обрабатывающих, а также в инкапсуляции - пользователи классов имеют доступ только к тому, что им в данный момент надо, тем самым исключается возможность влияния на какие-то другие блоки приложения. Чтобы увидеть пользу от ООП-классов, надо работать с достаточно сложными структурами данных, выстроенных в иерархию. Если используются простые структуры данных, и не сильно развитая архитектура приложения - смысла городить ООП-навороты никакого нет.
1-2. Если ты хочешь функцию с переменным числом параметров - проверки в любом случае будут нужны. Просто в случае параметров, ты проверяешь сами параметры, в случае массива - проверяешь массив.
Понятно. Я люблю работать с массивами очень удобно особенно с динамическими взял весь размер и проверок почти нет. В с++ хорошие возможности,
template<typename...Args> void test(const Args&...args) { const std::size_t size=sizeof...(args); int array[size]={args...}; for(std::size_t pos=0;pos<size;++pos) std::cout<<array[pos]<<std::endl; } int main() { test(1,2,3,4); return 0; }
В функции создаётся сразу и размер и сразу можно загнать любое количество параметров но одного типа да это в принципе и нужно сделать, но есть одна проблема я использую шаблоны и в этом случае для передачи информации в функцию библиотеки нужно указать тип функции а это уже неудобно, можно было бы написать 2 библиотеки одну родную на mqh, вторую в с++, в mqh возвращать типы а во второй считать, но можно ли передавать шаблоны в mqh я тоже не знаю.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
К примеру есть примитивная запись
В данной записи объявлены аргументы int q1,int q2,int q3. При расчётах так получилось что нужно использовать алгоритм этой функции, но количество параметров типа int уже больше. Значения этих параметров будут передаваться в массив и использоваться непосредственно в программе. Что можно сделать в этом случае?
Ну отсюда возникает второй вопрос каким способом можно узнать сколько у функции аргументов в моём случае четыре (bool Er,int q1,int q2,int q3)? Как провести проверку и узнать сколько у функции параметров. Просьба не грубить я конечно валенок но мне очень нужны подобные свойства для написания программ. Возможно ли что-то из этого реализовать? Вот у меня есть пример кода.
Правда код этот не из mql4. Что можно сделать чтобы реализовать подобное и возможно ли это?