Qt - соответствующая реализация C ++? - PullRequest
0 голосов
/ 16 марта 2011

Разрешает ли стандарт C ++ неявно или явно разрешать такие языковые расширения (или использовать любой другой термин, который вам нравится), например, MOC?

То есть, можем ли мы технически назвать Qt (включая MOC) соответствующей реализацией C ++?

Ответы [ 4 ]

14 голосов
/ 16 марта 2011

Стандарт не говорит вам, что вы не должны предварительно обрабатывать свои файлы перед их компиляцией, и именно это делает moc, так что это совершенно законно.И Qt - это библиотека для C ++, а не реализация языка.

5 голосов
/ 16 марта 2011

MOC - генератор кода, а не расширение языка.Весь код moc, который вы генерируете, вы также можете написать вручную (хотя это потребует много времени, ума и ошибок).Qt использует несколько макросов, таких как Q_OBJECT, Q_SIGNALS, Q_SLOTS и т. Д. Для объявлений и для подсказок moc.Это совершенно «легальное» использование препроцессора.Единственное, что вы можете считать нестандартным, - это дополнительный шаг запуска moc для генерации дополнительного кода при сборке проекта.Это вопрос системы сборки (хотя генерация кода не так уж и необычна, смотрите парсеры, интерфейсы IPC и т. Д.) И выходит за рамки C ++ как такового.

3 голосов
/ 16 марта 2011

MOC технически является препроцессором, и, следовательно, не имеет отношения к вопросу соответствия C ++.

0 голосов
/ 17 марта 2011

Вход для MOC не соответствует C ++ - MOC принимает такие ключевые слова, как slots и signals.Но вывод из MOC соответствует C ++.

Отредактировано , чтобы ответить на комментарий Фрэнка Остерфельда (я не смог ответить в комментарии, мне нужно форматирование):

slots и signals являются ключевыми словами препроцессора MOC.Если определен Q_MOC_RUN (что происходит при запуске MOC), то qobjectdefs.h имеет:

#define slots slots
#define signals signals

, что оставляет их незамещенными.

...