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

Допустим, у меня есть такая функция:

void processElement() {
doSomething(someArray[lastProcessedElement + 1]);
}

Дело в том, что каждый раз, когда вызывается эта функция, мне нужно сохранить последний элемент, для которого я вызвал doSomething. Так что здесь у меня есть два варианта:

  • Я могу создать частную переменную класса с именем lastProcessedElement и увеличивать ее значение каждый раз, когда вызывается эта функция. Этот подход кажется наиболее распространенным. Так что код может быть примерно таким:

    class Foo {
    int lastProcessedElement = 0;
    
    public:
    void processElement() {
    doSomething(someArray[++lastProcessedElement]);
    }
    }
    
  • Как второй вариант, я могу создать статическую переменную в функции и увеличивать ее каждый раз:

    // Class is not important here, so the function is:
    void processElement() {
    static int lastProcessedElement = 0;
    doSomething(someArray[++lastProcessedElement]);
    }
    

Первое решение добавляет немного сложности, которую я не хочу. Мне нравится держать вещи на месте.

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

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

5

Решение

Вы уже выяснили, почему статическая область действия функции является плохой идеей:

работает только если этот класс имеет только один экземпляр

Это плохое ограничение дизайна.

Просто сохраните состояние как обычную переменную члена класса.

5

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector