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

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

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

Можно:

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

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

Можно:

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

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

double fValue = MyStruct.field1;

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

 
Ihor Herasko:

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

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

 
Konstantin Nikitin:

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

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

 
Ihor Herasko:

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

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

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

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

 
Mihail Matkovskij:

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

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

 
Ihor Herasko:

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

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

 

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

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

 

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

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

Причина обращения: