Использование повторяющихся данных в различных классах и библиотеках

 

Я уже некоторое время назад хотел поднять эту тему, но руки не добирались. Объясню свою мысли на одном из жизненных примеров.

Например, есть библиотечный метод для логирования событий с сигнатурой:

void writeLog(string dataToWrite,                      // Данные, которые требуется записать в log-файл
              bool   needLogging = false,              // Флаг необходимости вывода лога в журнал и(или) на экран терминала
              bool   needPrinting = false) export {    // Флаг печати комментариев
// Тело метода
}

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

Переменные needLogging и needPrinting являются input-переменными. Они у меня в файле эксперта:

input string             _Logging                  =   " ____________________ Логирование ____________________ ";
input bool                i_needLogging = true,     // Флаг необходимости вывода лога в журнал и( или ) на экран терминала
                          i_needPrinting = true,    // Флаг печати комментариев
                          i_needComment = true;     // Флаг показа комментариев на графике

Т.е. могут задаваться пользователем при инициализации эксперта.  Получается в каждый класс придётся эти переменные передавать что-ли? Кто как в мкл это делает? Не хочется писать излишних переменных т.к. я сторонник оптимизации. Так же передавать в вызов каждого метода логирования input-переменные, но как-то, вроде бы, не совсем это правильно т.к. нарушается ООП. Я имел ввиду типа так вызывать:

void writeLog("ТО ЧТО БУДЕМ ЗАНОСИТЬ В ЛОГ-ФАЙЛ", i_needLogging, i_needPrinting);

Такой вариант имеет место быть, но мне не нравится. Какие ещё есть вариант?

 

У меня подобное решается через глобальный лог-файл и макросы TRACE() ( ну и есть макрос ASSERT() - пишущий в тот же лог-файл).

 
Georgiy Merts:

У меня подобное решается через глобальный лог-файл и макросы TRACE() ( ну и есть макрос ASSERT() - пишущий в тот же лог-файл).

О лог-файле я думал. Но это скорость работы совы пилит. Если совок будет работать на низких ТФ и обрабатывать много инструментов, не очень вариант.

Может проще в глобальную переменную писать?

 
hoz:

О лог-файле я думал. Но это скорость работы совы пилит. Если совок будет работать на низких ТФ и обрабатывать много инструментов, не очень вариант.

Если это отладочный вывод, как у меня, то в RELEASE-версии все они должны быть пустыми.

Если же это вывод каких-то необходимых данных - то врядли их будет много, соответственно, и ресурсов они много не отнимут.

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