Как создать фукцию с произвольным количеством аргументов?

 

Задача: хочу создать свою функцию лога, по умному ;-)

int start()
{
      Printf("Period = ", Period());
      return;
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int Printf(string words[])
{
      string   logStr = "";
      for(int i = 0; i < ArraySize(words); i++)
      {
            logStr = StringConcatenate(logStr, words[i]);
      }
      Print(logStr);
}

Нужен именно подобный синтаксис:

  • быстрая подсказка помогает набирать функцию
  • не используется оператор +, для строчек он ведет к пожиранию файла подкачки и на больших объемах винда вылетает
Помогите, как правильно оформить передачу аргументов.

Большое спасибо.

 
vedroid писал(а) >>

не используется оператор +, для строчек он ведет к пожиранию файла подкачки и на больших объемах винда вылетает

Чтож за обьемы то нужно иметь?

 
to vasya_vasya: Пожалуйста, ознакомьтесь с темой Ошибка в тестере "no memory for temp string"
 
vedroid >>:

Задача: хочу создать свою функцию лога, по умному ;-)

Нужен именно подобный синтаксис:

  • быстрая подсказка помогает набирать функцию
  • не используется оператор +, для строчек он ведет к пожиранию файла подкачки и на больших объемах винда вылетает
Помогите, как правильно оформить передачу аргументов.

Большое спасибо.

Не стал полностью вникать, отвечу на вопрос ветки

Как создать фукцию с произвольным количеством аргументов

void функция(int a=0,int b=0,int c=0)
{
 if(a!=0){}//решаем задачу
 if(b!=0){}//решаем задачу
 if(c!=0){}//решаем задачу
return;
}

// вызывается функция так :
                           функция(1,2,3);
// или так :
                           функция(1,2);
// или так :
                           функция(1);
// или так :
                           функция();

к сожалению параметры считаються только с лева на право. Те если вызвать вот так функция(1,3); то это значит что а=1, b=3, с=0.

 
Urain >>:

Не стал полностью вникать, отвечу на вопрос ветки

Как создать фукцию с произвольным количеством аргументов

к сожалению параметры считаються только с лева на право. Те если вызвать вот так функция(1,3); то это значит что а=1, b=3, с=0.


Скорее всего такое со строчками не работает :-(

int init()
{
      Printf("Period = ", Period());
      return;
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int Printf(string w1, string w2, string w3)
{
      string   logStr = "";
      logStr = StringConcatenate(logStr, w1, w2, w3);
      Print(logStr);
}

Целью является написать свою функцию логгера, которая легким вытиранием буквы "f" становится стандартной функцией записи в системный лог.

 

А почему не так?

int Printf(string w1, string w2="", string w3="")