Допустим, у меня есть такая функция:
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]);
}
Первое решение добавляет немного сложности, которую я не хочу. Мне нравится держать вещи на месте.
Я знаю, что второе решение работает, только если у этого класса есть только один экземпляр.
Таким образом, использование метода статических переменных является хорошим решением? И есть ли встроенное решение для класса с несколькими экземплярами? (Может быть решение этой конкретной проблемы индекса элемента массива, но я только что это придумал, я говорю о сохранении некоторого значения для следующего вызова функции)
Вы уже выяснили, почему статическая область действия функции является плохой идеей:
работает только если этот класс имеет только один экземпляр
Это плохое ограничение дизайна.
Просто сохраните состояние как обычную переменную члена класса.
Других решений пока нет …