Скачать MetaTrader 5

Проверка на значение - страница 2

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Mihail Matkovskij
5060
Mihail Matkovskij  
Murat Ishakov:
Пишу сложный индикатор, который работает с большим количеством данных, и эти данные хранятся в структуре, а структура ещё к тому же реализована в виде массива. 

И вот когда было написано огромное количество правил по этим данным, вдруг возникла острая необходимость при каждом вызове элемента структуры проверять что он не равняется нулю (и это обязательно). Если переделывать весь код, то это невероятно долго и сложно. А может можно как-то сделать например создать какую то функцию чтобы она при вызове элемента структуры автоматически проверяла его на ноль? Или может структуру переделать в класс? Но я в ООП не силён

Можно:

struct CStruct1{
  double v1, v2, v3;
};

bool Struct1Check(const CStruct1 &_struct){
  return _struct.v1 != 0 && _struct.v2 != 0 && _struct.v3 != 0;
}
Ihor Herasko
16447
Ihor Herasko  
Mihail Matkovskij:

Можно:

Понятно, что нужно написать функцию. А кто ее вызовет? 

К примеру, есть строка:

double fValue = MyStruct.field1;

Как, не внося изменений в этот код, воспользоваться проверкой на значение? 

Konstantin Nikitin
1265
Konstantin Nikitin  
Ihor Herasko:

Бывают, когда данные по ТФ не загружены.

Так прежде чем загнать в массив структуры очередной разряд нужно данные проверять. И если все устраивает то добавлять. Вроде это логичное действие.

Ihor Herasko
16447
Ihor Herasko  
Konstantin Nikitin:

Так прежде чем загнать в массив структуры очередной разряд нужно данные проверять. И если все устраивает то добавлять. Вроде это логичное действие.

Да, об этом я и говорил выше. 

Konstantin Nikitin
1265
Konstantin Nikitin  
Ihor Herasko:

Да, об этом я и говорил выше. 

Давайте не будем вступать в полемику, а подождем что нам ответит Murat Ishakov. Пока ни какой конкретики от него не слышно.
Mihail Matkovskij
5060
Mihail Matkovskij  
Ihor Herasko:

Как, не внося изменений в этот код, воспользоваться проверкой на значение? 

Для этого нужно знать, что программа делает в случае соответствия (например, записывает данные в буферный массив/массивы индикатора и т.д) и что она делает в случае несоответствия (пишет в лог сообщение об ошибке и останавливает процесс или, корректирует данные и передает их дальше и т.п).

Ihor Herasko
16447
Ihor Herasko  
Mihail Matkovskij:

Для этого нужно знать, что программа делает в случае соответствия (например, записывает данные в буферный массив/массивы индикатора и т.д) и что она делает в случае несоответствия (пишет в лог сообщение об ошибке и останавливает процесс или, корректирует данные и передает их дальше и т.п).

Допустим, в случае равенства нулю, выдать сообщение в лог и завершить выполнение. Если не равно, то просто переходим к следующей команде. Как сделать без внесения правок в код (не в код структуры, там как раз и предполагаются изменения)?

Mihail Matkovskij
5060
Mihail Matkovskij  
Ihor Herasko:

Допустим, в случае равенства нулю, выдать сообщение в лог и завершить выполнение. Если не равно, то просто переходим к следующей команде. Как сделать без внесения правок в код (не в код структуры, там как раз и предполагаются изменения)?

Всё зависит от конкретных целей. Смотря какие они, соответственно, так и будет работать программа. В код программы нужно вставить функцию. А в структуру зачем вносить изменения?

Alexey Viktorov
20888
Alexey Viktorov  

Что-то я подозреваю, что необходимость проверки вызвана делением на ноль.

Если так, то и решение может быть совершенно простым? x/(z != 0 ? z : 1);

Andrey Khatimlianskii
59255
Andrey Khatimlianskii  

Пока не будет нормальной постановки задачи, не будет и решения. Одни догадки.

А было бы интересно. Скорее всего, обертка в класс и реализация оператора "=" помогли бы.

123
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий