Re: Как наиболее корректно работать с глобальными данными
От: Evgeny.Panasyuk Россия  
Дата: 03.07.15 13:03
Оценка: +1
Здравствуйте, lnkuser, Вы писали:

L>Везде, абсолютно везде пишут что глобальные переменные, объекты это плохо и очень плохо.


А ещё пишут что goto и friend это плохо. Некоторые даже считают что обычные функции это плохо, и всё должно быть классом/объектом
Я практически для всего что фанатики называют considered harmful видел достойные применения.

L>Но нигде нормального ответа как обходится без них я не нашел. На форуме искал.


Если пытаться без них совсем по-честному, то нужно в каждую функцию использующую глобальное состояние передавать дополнительные параметры — плюсом здесь является чуть более простая кастомизация. Но в случае логирования это редко оправданно.
Как правило же используют те же самые глобальные объекты, но замаскированные под какими-нибудь buzzwords типа ServiceLocator или IoC-Container.

L>Все вроде идеально, но тут будет ошибка линкования.


Тема хорошо раскрыта в Modern C++ Design Александреску.
Один из простых вариантов — это так называемый Meyers Singleton:
// in header:
inline Log &log()
{
    static Log x;
    return x;
}
Отредактировано 03.07.2015 13:05 Evgeny.Panasyuk . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.