Форум » Консультации по программированию » Компановка обслуживающих классов » Ответить

Компановка обслуживающих классов

hoz: Если с другими классами обычно всё на порядок очевиднее и удобнее, то с некоторыми обслуживающими не совсем так. Например, вот есть у меня класс, который может писать логи, причём, при надобности печатать комментарии на графике и( или ) выводить в журнал содержимое. Так вот он у меня такой: [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); Подобные варианты как-то можно оптимизировать, чтоб не были такие длиннющие названия?

Ответов - 1

Scriptong: 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.



полная версия страницы