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

 
Alexey Volchanskiy #:

Через массив делали? Я в других языках видел такие возможности, но пригодилось только раз, когда работал с приемом битового потока.

Не, тупо пустые строки 64 раза) со строковым массивом было б интересней) но я тогда о них мало понимал)
 
Roman #:

Кхм. Как бы не видно поста об этом Вадимом.
Типа всем спасибо, решение найдено.
А своё возмущение оставь при себе, не с тобой было общение.

Ну, о том, что решение найдено - я в принципе писал. ) Сделал решение на основе <<. получилось вроде:

logs.err << "Some error " << period << " boolean to string " << bool_value << " etc... " << Logs::endl;

Работает замечательно, форматирует любые типы как угодно в отличии от предложеных тут идей с 64 переменных со значениями по умолчанию и конструкций вроде

log("Some error " + StringSubstr(EnumToString(PERIOD_H1), 7) + " boolean to string " + (bool_value ? "true" : false") + " etc...");
 
Вадим Калашнков #:

Ну, о том, что решение найдено - я в принципе писал. ) Сделал решение на основе <<. получилось вроде:

Работает замечательно, форматирует любые типы как угодно в отличии от предложеных тут идей с 64 переменных со значениями по умолчанию и конструкций вроде

Не понял, можно подробней.
 
Valeriy Yastremskiy #:
Не понял, можно подробней.

Что именно? Как именно у меня реализованы потоки? Если да - то напишите в личку.

 

У меня похощий вопрос.

Есть функция.

void SetError( string StrWarning )

Вызываю я её так.

SetError("i="+(string)i+" Время "+(string)TimeLocal());

Вопрос. Что нужно сделать, чтобы вызывать её также как функцию Print ? Т.е вот так:

SetError("i=",i," Время ",TimeLocal());
Документация по MQL5: Общие функции / Print
Документация по MQL5: Общие функции / Print
  • www.mql5.com
Print - Общие функции - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

Покa лучшее, что придумал выглядит так :

string dsfsdf;
#define MESTO __FILE__+":"_LINE__
#define SetError_ StringConcatenate(dsfsdf,
#define _EndError );StringConcatenate(dsfsdf,dsfsdf,MESTO);SetError(dsfsdf);

// Вызов.
SetError_"i=",i," d=",d," TimeLocal=",TimeLocal()_EndError
 
pivomoe #:
int OnInit() {
   SetError(3,6/7,6.7,33+44);
   // 306.777
   return(INIT_SUCCEEDED);
}

// можно размножить до 64
#define vars string s1 = "", string s2 = "", string s3 = "", string s4 = "", string s5 = "", string s6 = "", string s7 = "", string s8 = "", string s9 = "", string s10 = ""

void SetError(vars) {
   Print(s1, s2, s3, s4, s5, s6, s7, s8, s9, s10);
}
 
Спасибо. Работает. Но есть Warning 
 implicit conversion from 'number' to 'string'  temp define.mq5 13      32

// можно размножить до 64
#define vars string s1 = "", string s2 = "", string s3 = "", string s4 = "", string s5 = "", string s6 = "", string s7 = "", string s8 = "", string s9 = "", string s10 = ""

void SetError(vars)
  {
   string Str;
   StringConcatenate(Str,s1, s2, s3, s4, s5, s6, s7, s8, s9, s10);
   Print(Str);
  }

int OnInit() 
  {
   int i=1;
   double d=2.2;
   SetError("Переменные i=",i," d=",d);
   // 306.777
   return(INIT_SUCCEEDED);
  }
  Можно от него избавиться ?
 
Использовал считанные разы, когда писал обработку named pipes на шарпе, в этом языке есть такая фишка. А так по жизни совершенно не нужно.
 
pivomoe #:
Спасибо. Работает. Но есть Warning 
  Можно от него избавиться ?

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