Russian Qt Forum

Qt => Общие вопросы => Тема начата: neosapient от Октябрь 29, 2008, 15:40



Название: Как работает интерпретатор когда встречает emit ?
Отправлено: neosapient от Октябрь 29, 2008, 15:40
Добрый день.

Не могу понять, как работает интерпретатор когда встречает  emit. Где то должен быть #define ? Или модуль moc вообще всё подменяет ?

Другими словами: можно ли самому организовать "оповещение", как это делается командой emit ?


Название: Re: Как работает интерпретатор когда встречает emit ?
Отправлено: ритт от Октябрь 29, 2008, 16:01
invokeMethod


Название: Re: Как работает интерпретатор когда встречает emit ?
Отправлено: Rcus от Октябрь 29, 2008, 16:30
emit(Q_EMIT) это просто пустой макрос чтобы отличать вызовы методов от сигналов, вся магия заключена в moc_*.cpp, там находится реализация сигналов и таблица метаинформации для класса, moc генерит подобные вещи для всех встреченных классов с макросом Q_OBJECT


Название: Re: Как работает интерпретатор когда встречает emit ?
Отправлено: SASA от Октябрь 29, 2008, 17:13
emit(Q_EMIT) это просто пустой макрос чтобы отличать вызовы методов от сигналов.

Всегда мучили вопросы: "А заканчиваются ли на этом функции emit? А может в следующей версии Qt без emit и работать перестанет?"


Название: Re: Как работает интерпретатор когда встречает emit ?
Отправлено: Rcus от Октябрь 29, 2008, 17:32
Всегда мучили вопросы: "А заканчиваются ли на этом функции emit? А может в следующей версии Qt без emit и работать перестанет?"
У Qt лучшая документация, если там чего-то нет значит это не входит в контракт интерфейса и является деталью реализации. В Old New Thing подробно рассказывается о контракте интерфейса, если надо почитаете


Название: Re: Как работает интерпретатор когда встречает emit ?
Отправлено: pastor от Октябрь 29, 2008, 17:51
ихо, emit служит для наглядности да и только


Название: Re: Как работает интерпретатор когда встречает emit ?
Отправлено: SASA от Ноябрь 01, 2008, 15:38
У Qt лучшая документация, если там чего-то нет значит это не входит в контракт интерфейса и является деталью реализации. В Old New Thing подробно рассказывается о контракте интерфейса, если надо почитаете
А что такое контракт интерфейса, и где читать Old New Thing?
Заранее спасибо.


Название: Re: Как работает интерпретатор когда встречает emit ?
Отправлено: Rcus от Ноябрь 01, 2008, 21:08
http://en.wikipedia.org/wiki/Contract_programming
А The Old New Thing это блог Raymond Chen, человека знающего почему работает Windows, вот интересный пример: http://blogs.msdn.com/oldnewthing/archive/2008/09/25/8965129.aspx (title:Even if a function doesn't do anything, you still have to call it if the documentation says so, because it might do something tomorrow)