АвторСообщение





Сообщение: 41
Зарегистрирован: 30.05.13
Репутация: 0
ссылка на сообщение  Отправлено: 02.08.15 23:15. Заголовок: Компановка обслуживающих классов


Если с другими классами обычно всё на порядок очевиднее и удобнее, то с некоторыми обслуживающими не совсем так. Например, вот есть у меня класс, который может писать логи, причём, при надобности печатать комментарии на графике и( или ) выводить в журнал содержимое. Так вот он у меня такой:

[img]https://leto32d.storage.yandex.net/rdisk/58c8242c72542d9f52fa71fe72a30a75f71a43ae4010c90995f14b01fe485ae6/inf/jg5c2NqxvJTzWZhB0z_YWRPnraKyAwq8L_TNtXukKzfWGdnzJ5Tu-CTHogynw0INsN_-iD7dxs1OKPESZBF84Q==?uid=0&filename=2015-08-03%2000-19-40%20Logging.mqh%20-%20Microsoft%20Visual%20Studio.png&disposition=inline&hash=&limit=0&content_type=image%2Fpng&tknv=v2&rtoken=22385f3901c195d06c58dc9f9e1875cd&force_default=no&ycrid=na-37543db08f72666f5f193f1b5fc0c310-downloader13g[/img]

3 параметра метода WriteLog(), а точнее fb_NeedLogs, fb_PrintUP и fb_CommentUP являются статическими, т.е. задаются раз из внешних переменных и сохраняют свои значения в течении времени работы робота. Так вот всё бы то хорошо, но как-то уж слишком длинные вызовы происходят, на самом деле этого метода. Например:

Logging::WriteLog (StringConcatenate (__FUNCTION__, " => Модификация успешно завершена ", CErrs.ErrorToString (_LastError)), Logging::NeedLogs, Logging::PrintUP, Logging::CommentUP);

Подобные варианты как-то можно оптимизировать, чтоб не были такие длиннющие названия?

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 1 [только новые]







Сообщение: 1678
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 3
ссылка на сообщение  Отправлено: 09.08.15 11:02. Заголовок: hoz пишет: Подобные..


hoz пишет:

 цитата:
Подобные варианты как-то можно оптимизировать, чтоб не были такие длиннющие названия?


Да, можно. Для этого не нужно заигрываться со статическими структурами и классами. В идеальной программе их вообще не должно быть. Все это нужно правильно распределить по классам.

В данном конкретном случае класс Loggin должен быть создан один раз в каком-нибудь классе программы или на глобальном уровне. Всем остальным классам происходит передача константной (а можно и неконстантной) ссылки на экземпляр класса:

 цитата:

class Loggin
{
public:
void WriteLog(string txt) const
{
Print(txt);
}
};

class MyClass
{
public:
void Function1(const Loggin &loggin)
{
loggin.WriteLog(__FUNCTION__ + ". Hello, world!");
}
};


Loggin g_loggin;
MyClass g_class1, g_class2, g_class3;

void OnTick()
{
g_class1.Function1(g_loggin);
g_class2.Function1(g_loggin);
g_class3.Function1(g_loggin);
}



А переменные NeedLogs, PrintUP и CommentUP нужно сделать членами класса. Их изменение можно оформить через соответствующие методы класса Loggin.


Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  2 час. Хитов сегодня: 0
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет