Название: Вложенные типы и опережающие описания Отправлено: Akon от Февраль 13, 2012, 09:04 Дабы не плодить лишних зависимостей времени компиляции часто применяется опережающее описание (повсеместно используется в Qt).
Пример: Код: #include <QtGui/QMainWindow> Код: #include <QtGui/QMainWindow> Название: Re: Вложенные типы и опережающие описания Отправлено: _OLEGator_ от Февраль 13, 2012, 09:13 Я называю это предобъявлением.
Вопрос по проектированию - цель создания зависимости от QSystemTrayIcon::ActivationReason и какая обработка в слоте? Название: Re: Вложенные типы и опережающие описания Отправлено: LisandreL от Февраль 13, 2012, 09:35 Вопрос по проектированию - цель создания зависимости от QSystemTrayIcon::ActivationReason и какая обработка в слоте? Прицепить слот к сигналу QSystemTrayIcon::activated( QSystemTrayIcon::ActivationReason reason ) - очевидно же.ActivationReason'ы очень разные, без параметра тут не обойтись. Название: Re: Вложенные типы и опережающие описания Отправлено: Akon от Февраль 13, 2012, 09:45 В идеале хотелось бы опережающее описание:
Код: class QTrayNotifyIcon { Название: Re: Вложенные типы и опережающие описания Отправлено: ssoft от Февраль 13, 2012, 10:08 В идеале хотелось бы опережающее описание: Код: class QTrayNotifyIcon { Никаких проблем в этом нет. Здесь рассмотрены две разные архитектурные зависимости. Предварительное объявление необходимо при ИСПОЛЬЗОВАНИИ НЕЗАВИСИМЫХ типов данных (1-й вариант). Если же есть явная ЗАВИСИМОСТЬ одного типа от другого, в данном случае используются внутренние данные QSystemTrayIcon при объявлении метода, тогда однозначно только #include. Название: Re: Вложенные типы и опережающие описания Отправлено: _OLEGator_ от Февраль 13, 2012, 10:14 to LisandreL:
я имел в виду проектирование и возможность вынести обработку в другое место. Но все равно, это экономия на спичках получается. Название: Re: Вложенные типы и опережающие описания Отправлено: andrew.k от Февраль 13, 2012, 11:00 С такой ситуации в случае енумов, я использую int в методе вместо enum.
Не всегда правда. Название: Re: Вложенные типы и опережающие описания Отправлено: LisandreL от Февраль 13, 2012, 11:05 С такой ситуации в случае енумов, я использую int в методе вместо enum. Сигнал со слотом не сконнектятся при разных (пусть и приводимых) типах.Не всегда правда. Название: Re: Вложенные типы и опережающие описания Отправлено: andrew.k от Февраль 13, 2012, 11:08 С такой ситуации в случае енумов, я использую int в методе вместо enum. Сигнал со слотом не сконнектятся при разных (пусть и приводимых) типах.Не всегда правда. Название: Re: Вложенные типы и опережающие описания Отправлено: LisandreL от Февраль 13, 2012, 11:20 Ну так, а зачем их делать разными? Потому, что вы это 2 постами выше предложили. ;DСигнал QSystemTrayIcon::activated( QSystemTrayIcon::ActivationReason reason ) нам достаётся вместе с Qt поэтому тип тут нам не изменить. Вы говорите, что «С такой ситуации в случае енумов, я использую int в методе вместо enum.», но именно в такой, как указанно, ситуации int использовать нельзя, так как connect не сработает. Название: Re: Вложенные типы и опережающие описания Отправлено: Igors от Февраль 13, 2012, 11:34 ...Оно то может и не проблема, просто как-то выбивается из общей концепции. Это также бывает когда хотелось бы inline в h файле. Не думаю что концепция здесь как-то нарушается. Вы используете конкретные подробности QSystemTrayIcon, стало быть пора от предварительного описания перейти к полному - это нормально.А все-таки как хорошо проектировать "идеальный код" (эх, живут же люди :)) Название: Re: Вложенные типы и опережающие описания Отправлено: andrew.k от Февраль 13, 2012, 11:46 Ну так, а зачем их делать разными? Потому, что вы это 2 постами выше предложили. ;DСигнал QSystemTrayIcon::activated( QSystemTrayIcon::ActivationReason reason ) нам достаётся вместе с Qt поэтому тип тут нам не изменить. Вы говорите, что «С такой ситуации в случае енумов, я использую int в методе вместо enum.», но именно в такой, как указанно, ситуации int использовать нельзя, так как connect не сработает. Иногда можно поступить так. Вопрос в топике был "Если бы вы проектировали QSystemTrayIcon, как поступили бы?", а не вечный "что делать?" |