Есть ли возможность делать функции с переменным количеством параметров разного типа как Printf(argument, ...)? - страница 4

 
Stanislav Korotky #:

Можно заменить #define на шаблон, но в шаблоне можно использовать только до 8 параметров.

   т.е написать 8 функций на шаблонах от 1 до 8 параметров ? Иначе как записать строку на шаблоне ?

#define vars string s1 = "", string s2 = "", string s3 = "", string s4 = "", string s5 = "", string s6 = "", string s7 = "", string s8 = "", string s9 = "", string s10 = ""
 

Вроде получилось сделать все, что хотел. Сделал define и простыню шаблонных функций. 

#define STOP_PROGRAM_ StopProgramm(" "+__FILE__+":"+(string)__LINE__,

template<typename T1>
void StopProgramm(T1 var1 ) 
  {
   string Str;
   StringConcatenate(Str,var1);
   _StoopProgramm(Str);
  } 
template<typename T1,typename T2>
void StopProgramm(T1 var1,T2 var2) 
  {
   string Str;
   StringConcatenate(Str,var2,var1);
   _StoopProgram(Str);
  }

 Теперь вызываю вот так.

int OnInit()
  {
   int i=45;
   double d=343.3;   
   bool Otvet=false;
   STOP_PROGRAM_" i=",i," d=",d," Otvet=",Otvet," TimeLocal=",TimeLocal());   
   return INIT_FAILED;
  }

Результат:

i=45 d=343.3 Otvet=false TimeLocal=2023.01.24 20:03:00 Test:8
Кстати про ограничение в 8 параметров в шаблонных функций ничего не нашел. Сделал простыню до 10 параметров.
 
pivomoe #:

Вроде получилось сделать все, что хотел. Сделал define и простыню шаблонных функций. 

 Теперь вызываю вот так.

Результат:

Кстати про ограничение в 8 параметров в шаблонных функций ничего не нашел. Сделал простыню до 10 параметров.

В документации (https://www.mql5.com/ru/docs/basis/oop/templates) написано:

Количество параметров в шаблоне не может быть больше восьми.

Но, сейчас берет и больше - видимо что-то поменяли.

Документация по MQL5: Основы языка / Объектно-ориентированное программирование / Шаблоны функций
Документация по MQL5: Основы языка / Объектно-ориентированное программирование / Шаблоны функций
  • www.mql5.com
Шаблоны функций - Объектно-ориентированное программирование - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Причина обращения: