Ошибки, баги, вопросы - страница 2309

 
TheXpert:

или вы указываете явно все праметры, или не указываете.

Вроде, полная однозначность в коде. T2 - int, T1 - double.

 
fxsaber:

Вроде, полная однозначность в коде. T2 - int, T1 - double.

да. это неважно, все равно надо указывать оба параметра

 
TheXpert:

да. это неважно, все равно надо указывать оба параметра

Не догадался, Спасибо!

 

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

typedef void (*FUNC)();

void f1() {};

void f2( FUNC g = f1 ) {} // 'f1' - constant expected
 
fxsaber:

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

перегрузкой?
 
TheXpert:
перегрузкой?

Это понятно. Спрашивал не про обход этой ситуации, а про правильный ее синтаксис, чтобы ошибку не выдавал компилятор. Думаю, это возможно на C++ и, скорее всего, на MQL5.

 
Неправильная работа ExpertRemove в режиме Оптимизации.
input int Range = 0; // 1 .. 10

bool FuncInit()
{
  ExpertRemove();
  
  return(true);
}

int Count = 0;

void OnTick()
{
  static const bool Init = FuncInit();
  
  Count++;
}

double OnTester()
{
  return(Count);
}


Запускаем Оптимизацию. По коду видно, что все проходы должны прерваться по ExpertRemove. Но этого не происходит:

Core 5  pass 8 tested with error "expert removed itself in global initialization function" in 0:00:00.312
Core 5  pass 9 returned result 331851.00 in 0:00:00.125
Core 4  pass 6 tested with error "expert removed itself in global initialization function" in 0:00:00.265
Core 4  pass 7 returned result 331851.00 in 0:00:00.140
Core 1  pass 0 tested with error "expert removed itself in global initialization function" in 0:00:00.312
Core 1  pass 1 returned result 331851.00 in 0:00:00.125
Core 3  pass 4 tested with error "expert removed itself in global initialization function" in 0:00:00.296
Core 3  pass 5 returned result 331851.00 in 0:00:00.156
Core 8  pass 2 tested with error "expert removed itself in global initialization function" in 0:00:00.265
Core 8  pass 3 returned result 331851.00 in 0:00:00.140
Tester  optimization finished, total passes 10
Statistics      optimization done in 0 minutes 01 seconds
Statistics      shortest pass 0:00:00.125, longest pass 0:00:00.156, average pass 0:00:00.137
Statistics      local 10 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)

Половина проходов проигнорировали ExpertRemove. Воспроизводится?


ЗЫ Это приводит к расхождениям одиночных проходов и оптимизационных.

 
fxsaber:
typedef void (*FUNC)();
void f1() {};

void f2()
{
   f1();
}

void f2( FUNC g) 
{
   g();
}

по сути это то же самое что одна функция с дефолтным параметром. обычно это так и решается, так что это не обход и не костыль а вполне нормальное решение.

 
TheXpert:

по сути это то же самое что одна функция с дефолтным параметром. обычно это так и решается, так что это не обход и не костыль а вполне нормальное решение.

Вариант перегрузки понятен. Но для каждой функции создавать такое - не гибко совсем. Неужели и в C++ нельзя сделать красиво?

 
fxsaber:

Вариант перегрузки понятен. Но для каждой функции создавать такое - не гибко совсем. Неужели и в C++ нельзя сделать красиво?

хз, с++ с константами гибче, но именно с указателями функций в качестве параметров по умолчанию я не работал

UPD g++ кушает ваш код на ура