Russian Qt Forum
Ноябрь 22, 2024, 23:50
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Программирование
>
С/C++
>
Конструктор и лог
Страниц:
1
[
2
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Конструктор и лог (Прочитано 10264 раз)
m_ax
Джедай : наставник для всех
Offline
Сообщений: 2095
Re: Конструктор и лог
«
Ответ #15 :
Сентябрь 13, 2015, 14:55 »
Цитировать
При чём здесь спагетти в коде при парсинге кода? Нам дано, что дано и все варианты нужно отработать.
Ну как причём:
Цитировать
И вот вы находите if, создаётся класс, который отвечает за парсинг if.... Вообщем классическая нисходящая рекурсия. Т.е. классов много. И жизнь у них очень мала.
Ладно, забейте)
Сегодня всё-таки праздник
Записан
Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..
Arch Linux Plasma 5
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Конструктор и лог
«
Ответ #16 :
Сентябрь 13, 2015, 15:28 »
Цитата: AzazelloAV от Сентябрь 13, 2015, 13:45
Слишком, слишком сложно.
Ведь это не основной код, вспомогательный.
Ну это жалкие крохи по сравнению с тем во что разворачивается Q_OBJECT, а против него Вы почему-то не возражаете
Может по аналогии стоит сделать упор на краткость использования (прицепил макрос и все), а служебный класс (задаваемый этим макросом) развивать всяко-разно.
Цитата: AzazelloAV от Сентябрь 13, 2015, 14:28
Агаг. Проблема начинает вылазить, когда нам нужно решать, в какой класс записывать лог, в какой нет.
Т.е. именно проблема в наследовании и проявляется. При создании класса (далее я под созданием класса имею в виду создание объекта класса) выводить нам нужно имя базового класса? Нет конечно.
А почему это нет? С какой стати это скрывать? Не вижу для этого никаких оснований, лог должен содержать полную инфу
А вот интересно как определить логируемый класс или нет - учитывая что он может наследоваться от логируемого? Сходу не сообразю,
m_ax
, как там с "магией"?
Записан
AzazelloAV
Гость
Re: Конструктор и лог
«
Ответ #17 :
Сентябрь 13, 2015, 15:37 »
Цитата: Igors от Сентябрь 13, 2015, 15:28
Ну это жалкие крохи по сравнению с тем во что разворачивается Q_OBJECT, а против него Вы почему-то не возражаете
Может по аналогии стоит сделать упор на краткость использования (прицепил макрос и все), а служебный класс (задаваемый этим макросом) развивать всяко-разно.
Этот вариант я и принял.
Цитировать
Агаг. Проблема начинает вылазить, когда нам нужно решать, в какой класс записывать лог, в какой нет.
Т.е. именно проблема в наследовании и проявляется. При создании класса (далее я под созданием класса имею в виду создание объекта класса) выводить нам нужно имя базового класса? Нет конечно.
Цитировать
А почему это нет? С какой стати это скрывать? Не вижу для этого никаких оснований, лог должен содержать полную инфу
Потому что не будет разницы, между наследованием и вызовов класса.
Я уже об этом писал выше. Повторюсь - "Enter to class Name1" и "Enter to class Name2".
Вопрос - класс Name1 вызван наследуюемым конструктором (Name2) или класс Name1 вызвал Name2?
А вот интересно как определить логируемый класс или нет - учитывая что он может наследоваться от логируемого? Сходу не сообразю,
m_ax
, как там с "магией"?
[/quote]
Записан
m_ax
Джедай : наставник для всех
Offline
Сообщений: 2095
Re: Конструктор и лог
«
Ответ #18 :
Сентябрь 13, 2015, 15:43 »
Цитировать
А вот интересно как определить логируемый класс или нет - учитывая что он может наследоваться от логируемого? Сходу не сообразю, m_ax, как там с "магией"?
Ну я бы курил в сторону SFINE
http://habrahabr.ru/post/205772/
Записан
Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..
Arch Linux Plasma 5
AzazelloAV
Гость
Re: Конструктор и лог
«
Ответ #19 :
Сентябрь 13, 2015, 15:48 »
Цитата: m_ax от Сентябрь 13, 2015, 15:43
Цитировать
А вот интересно как определить логируемый класс или нет - учитывая что он может наследоваться от логируемого? Сходу не сообразю, m_ax, как там с "магией"?
Ну я бы курил в сторону SFINE
http://habrahabr.ru/post/205772/
Вместо одной проблемы создаются десяток других.
Нет уж, я лучше "листик на монитор навешу". Для меня тема закрыта, засим откланиваюсь. Все остальные решения в разы сложнее.
Записан
m_ax
Джедай : наставник для всех
Offline
Сообщений: 2095
Re: Конструктор и лог
«
Ответ #20 :
Сентябрь 13, 2015, 15:58 »
Цитировать
Вместо одной проблемы создаются десяток других.
Ну дык я и не вам это предлагаю)
Записан
Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..
Arch Linux Plasma 5
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Конструктор и лог
«
Ответ #21 :
Сентябрь 14, 2015, 08:57 »
Цитата: AzazelloAV от Сентябрь 13, 2015, 15:37
Потому что не будет разницы, между наследованием и вызовов класса.
Я уже об этом писал выше. Повторюсь - "Enter to class Name1" и "Enter to class Name2".
Вопрос - класс Name1 вызван наследуюемым конструктором (Name2) или класс Name1 вызвал Name2?
По правилам языка нельзя обойти конструктор базового класса, поэтому последовательность Name1, Name2 всегда означает конструктор Name2.
Цитата: AzazelloAV от Сентябрь 13, 2015, 15:48
Вместо одной проблемы создаются десяток других.
Нет уж, я лучше "листик на монитор навешу". Для меня тема закрыта, засим откланиваюсь. Все остальные решения в разы сложнее.
Ну а нервничать зачем? Ах, не оказалось быстрого, удобного решения (как из ассыстента), расстроился
Так это нормально. А задумка совсем неплохая. Вот только как бы ее "расширить". Печать в конструкторе (кстати почему и не в деструкторе тоже?) - ну иногда полезна, но может и засыпать консоль (если будут контейнеры). Есть смысл печатать (по запросу) число "живых" объектов такого-то типа, отслеживая порядковый номер и.т.д. Ну да ладно, не хотите обсуждать - не надо.
Записан
AzazelloAV
Гость
Re: Конструктор и лог
«
Ответ #22 :
Сентябрь 19, 2015, 14:15 »
Цитировать
По правилам языка нельзя обойти конструктор базового класса, поэтому последовательность Name1, Name2 всегда означает конструктор Name2.
Нельзя, но это не будет обозначать, что это наследуемый вызов. Это может быть вызов конструктора из конструктора (не наследуемого, а new что-то новое), что введёт в заблуждение при исследовании лога. Тут только один выход - промежуточные (базовые) классы не должны ничего выводить, что уже определенныё на нас ограничения накладывает - нельзя использовать непосредственно базовый класс, все вызывающие классы должны быть "листьями дерева".
Цитировать
Ну а нервничать зачем? Ах, не оказалось быстрого, удобного решения (как из ассыстента), расстроился
Так это нормально. А задумка совсем неплохая. Вот только как бы ее "расширить". Печать в конструкторе (кстати почему и не в деструкторе тоже?) - ну иногда полезна, но может и засыпать консоль (если будут контейнеры). Есть смысл печатать (по запросу) число "живых" объектов такого-то типа, отслеживая порядковый номер и.т.д. Ну да ладно, не хотите обсуждать - не надо.
Нельзя переходить на личности. При чем здесь ассистант? и нервы здесь нипричём. Почему про деструктор изначально промолчал? Конечно, нужно выход из деструктора логировать. Но это зеркальное отображение конструктора, так что разницу не вижу. Тем более, деструктор виртуальный (это нам мало поможет, если с конструктором не разобрались).
Нет, я хочу обсуждать, почему, просто был в отпуске, вот и всё.
Также про оверхед Q_OBJECT (спрашивали выше) - нету тут оверхеда, потому как есть логи, которые могут анализировать пользователи, а есть логи, которые только для дебага. Поэтому наследование от QObject + макрос Q_OBJECT как оверхед для дебажной версии (пусть хоть в 10 раз) меня не очень беспокоит.
Цитировать
Есть смысл печатать (по запросу) число "живых" объектов такого-то типа, отслеживая порядковый номер и.т.д. Ну да ладно, не хотите обсуждать - не надо.
Тут от задачи зависит, мне такое не подходит. Мне нужна визуализация последовательности вызовов. Ну а консоль не засорится, просто нужно добавить лишний ifdef, вывод то такой не всегда нужен, а в случает глубокой отладки.
Также хочу отбросить инсинуации "тут что-то не так и ты не правильно проектируешь классы". Это синтаксический разбор файла, и иерархия классов (наследование), и иерархия объектов (принадлежность) может быть какой угодной и пересекаться по сотни раз с друг другом во всех случаях.
Для меня лично выход из этой ситуации (если использовать системный подход) - это Q_OBJECT, где мы можем наворотить что угодно - и про забывчивость и все остальное. Но пока очень лениво, может когда будет уровень ошибки такой, что займусь этой задачей. Пока не буду распыляться. Тем более, чтобы сделать это решение универсальным, для будущих решений, нужно потратить не мало времени (ну неделю точно с тестированием всяким), чего не хочется. Только не говорите, что неделя много.
«
Последнее редактирование: Сентябрь 19, 2015, 21:50 от AzazelloAV
»
Записан
Страниц:
1
[
2
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...