Как избежать дублирования кода? - страница 3

 
Sergey Gridnev #:
Познания "около нуля" это как раз тот самый уровень, который позволяет оценивать собеседника по его короткой фразе.

Да вас-то оценивать не надо… Вам цена равна моим познаниям ООП…

 
Alexey Viktorov #:

Да вас-то оценивать не надо… Вам цена равна моим познаниям ООП…

Вам не на кого желчь излить?
 

Понеслось....

 
Sergey Gridnev #:
Вам не на кого желчь излить?

Не цепляй меня.

prostotrader #:

Понеслось....

Нет, у меня достаточно жизненного опыта чтобы плюнуть на … это ……… как оно называется, что-то забыл.
 

А хочется вот так:

#include <iostream>

template<typename ... ParamType>
void loop(void(*func)(int,ParamType...),ParamType ... param) {
        for (int i = 0; i < 10; ++i)
                func(i,param ...);
}

void Foo(int i) {
        std::cout << i << std::endl;
}

void Foo1(int i, int ii) {
        std::cout << (i + ii) << std::endl;
}

int main()
{
        loop(Foo);
        loop(Foo1, -5);
}

Но упс. По крайней мере сходу закостылить, ничего не придумалось.

 
prostotrader #:

Насколько мне помнится, то Вы говорили, что в одном цикле Вам нужны логические блоки

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

В примере Дмитрия цикл вызывается не один раз.

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

p.s. а для себя выбрал реализацию все-таки через ООП. Я решил, что с различными объектами будет меньше путаницы, чем каждый раз переназначать один и тот же указатель. 

 
Sergey Gridnev #:
Это как раз нестандартное использование ООП. И, в общем-то, странноватое.

А в чём странность, если не секрет? Я без подвоха спрашиваю... лишь одна из областей полиморфизма я так понимаю. Там есть гораздо более сложные вещи, как мне кажется. 

 
leon_17 #:

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

p.s. а для себя выбрал реализацию все-таки через ООП. Я решил, что с различными объектами будет меньше путаницы, чем каждый раз переназначать один и тот же указатель. 

Тогда выражайтесь более точно.

Из Вашего описания следует, что в цикле нужно выполнять различные операции.

Во всяком случае я так понял.

 
prostotrader #:

Тогда выражайтесь более точно.

Из Вашего описания следует, что в цикле нужно выполнять различные операции.

Во всяком случае я так понял.

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

Вопрос несколько раз переписывал, чтобы выразиться как можно более точно. Извините, на более оказался не способен )

 
leon_17 #:

Ну так они и выполняются разные, в зависимости от того, какой управляющий параметр передается в функцию с циклом. Вопрос несколько раз переписывал, чтобы выразиться как можно более точно. Извините, на более оказался не способен )

Тогда зачем ООП?

Передавайте параметр в цикл.

void MyCycle(const int param_1, const int param_2)
 
{

  switch(param_1)
    {
      case 0:
        continue;
      break;
      case 1:
        //......
      break;
    }
  for(int i = 0; i< param_2;i++)
  {
    //
  } 
}