Насколько современный язык C ++ используется в Qt? - PullRequest
10 голосов
/ 11 мая 2009

Я слышал, что Qt API написан на довольно устаревшем языке C ++. Это правда?
Есть ли планы заставить его использовать более современный язык C ++? Есть ли официальная информация по этому поводу?

Существуют ли какие-либо проекты с целью обернуть текущие конструкции Qt API более современным C ++?

UPDATE
Это больше к этому вопросу, чем к шаблонам, и дело не только в текущем положении дел (поэтому я отметил его тегом future ).

UPDATE
Я особенно обеспокоен Qt API, так как именно с этим работают пользователи этой инфраструктуры.
Использование современного языка C ++ в API делает его более надежным, гибким и простым в использовании .
Какой тип C ++ используется внутри Qt, для меня гораздо менее важен.

Ответы [ 9 ]

27 голосов
/ 11 мая 2009

Qt, как известно, не использует шаблоны, одну очень полезную современную функцию c ++. Но это не означает, что существует необходимость в оболочке для API Qt. Qt использует собственные прекомпиляторы для решения тех же проблем. Некоторым не нравится этот подход, но API Qt очень прост и эффективен, и я не верю, что существует реальная необходимость его модернизации. В частности, сигналы и слоты, очень впечатляющая особенность Qt, могут быть достигнуты с помощью шаблонов (см. Библиотеку boost.signals ), но способ, которым Qt реализовал это, все еще намного эффективнее.

Я бы сказал "не волнуйся и используй Qt как есть".

EDIT: Извините, я забыл о контейнерах шаблонов, поставляемых с Qt. Но, тем не менее, API Qt очень мало использует шаблоны классов. Это не означает, что они не используют их внутри Qt или что их способ кодирования устарел.

Boost. Сигналы, вероятно, более мощные, чем сигналы / слоты Qt, но, насколько я могу судить, нет споров о том, какой из них проще использовать. Одна очень убедительная реализация принципа KISS .

17 голосов
/ 12 мая 2009

Qt использует современные варианты языка C ++ - в настоящее время C ++ 98, и да, Шаблоны также используются там, где это уместно. Qt имеет некоторую поддержку STL. Смотрите, например http://qt -project.org / doc / qt-5.1 / qtcore / container.html - и вспомогательные функции, например, для станд :: строка. Это все в документации: http://qt -project.org / doc / qt-5.1 / qtdoc / index.html ;) Вопрос о шаблонах и moc - это вопрос, который мы задаем так часто, что мы добавляли его в наша документация; http://qt -project.org / док / кварта-4,8 / templates.html

12 голосов
/ 11 мая 2009

Источники Qt содержат шаблон "template <" 1280 раз только в src / corelib. Я не вижу, как это может быть ошибочно, поскольку «Qt, как известно, не использует шаблоны» </p>

9 голосов
/ 13 мая 2009

В отличие от Boost.Signals, реализация сигналов / слотов в Qt является поточно-ориентированной благодаря использованию соединений в очереди. Однако 2 мая 2009 года был выпущен Boost.Signals2, который принес желаемую безопасность потоков. С точки зрения разработчика, реализация сигналов / слотов в Qt намного проще в использовании, в основном из-за того, что он не использует шаблоны. Для более детального изучения того, почему Qt использует moc вместо шаблонов для сигналов и слотов, вот страница из их документации.

Для тех, кто интересуется, почему в Qt есть свой собственный набор классов контейнеров, я почти уверен, что основной мотивацией было предложение неявного совместного использования. Все классы контейнера неявно совместно используются, поэтому всякий раз, когда копируется QList, копируется только указатель на данные. Смотрите здесь для получения дополнительной информации о мелком копировании в Qt.

6 голосов
/ 22 мая 2009

Чтобы прямо ответить на ваш вопрос, API Qt всеобъемлющий . Я почти уверен, что они когда-нибудь выпустят функцию QApp :: ParkMyCar (). Иногда они реализуют несколько способов сделать одно и то же, с разными позициями по эффективности и простоте использования. Проверьте их (отличную) документацию. Это столь же всесторонне, и спасло мою задницу не раз.

Из того, что я видел в исходном коде Qt, код очень эффективен.
Посмотрите на функции в конфигурации установки - вы можете включить / отключить поддержку различных функций (включая STL, многопоточность и даже графический интерфейс). Кроме того, когда Trolls сделали Qt 4 основополагающим, они не обменяли функции против code-jazz - они просто предоставили больше обоих. Учитывая качество их программистов и способ обновления основных версий, я не думаю, что нам нужно беспокоиться об устаревании Qt (или его частей).

Целевым рынком Qt (для настольных компьютеров) является компания MamaPapa, которая производит настольные будильники Hello Kitty и хочет однократное кодирование и будьте уверены, что он работает на всех «нормальных» системах - Windows 98 и выше популярные дистрибутивы Linux и Mac OS X. Это означает, что вы можете просматривать все основные компиляторы в каждом типе системы. Если это означает, что шаблон-мастерство должно быть сведено к минимуму, пусть будет так.

4 голосов
/ 27 мая 2009

На протяжении всей жизни Qt 4.x я сомневаюсь, что имеет смысл переписывать части Qt для использования, например. «более современный» C ++. Это связано с тем, что все выпуски в одной и той же основной версии Qt по-прежнему должны быть двоично-совместимыми . Мы также не можем просто устареть или устареть классы, которые все еще используют клиенты (хотя совершенно нормально вводить новые вещи, даже для ограниченного набора поддерживаемых компиляторов).

Если, наконец, Qt 5 уже практически открыт, а современные конструкции и функции C ++ наконец доступны на целевых поддерживаемых платформах и компиляторах, и это поможет разработчикам и клиентам C ++ писать более качественный и мощный код, тогда почему нет?

4 голосов
/ 11 мая 2009

Мне действительно не нравится, как Qt удалось реализовать механизм сигналов / слотов. Их прекомпилятор 'moc' действительно пахнет для меня хаком, и он даже не поддерживает стандарт C ++.

Я думаю, было бы здорово, если бы Qt мог модернизировать себя, чтобы использовать хотя бы классы STL. Что было бы действительно замечательно, так это то, что Qt по возможности использовал Boost (особенно Boost.Signals).

2 голосов
/ 11 мая 2009

Мне тоже не нравится, как Qt добавляет магию вуду в C ++. Он использует так много макросов, что ужасно напоминает мне о C. На данный момент нет ничего, что указывало бы на то, что Qt будет добрее к возможностям C ++ в будущем. Мне бы очень хотелось, чтобы это было больше похоже на C ++, а не на собственный язык (например, зачем нам нужны std :: vector <> и QVector <>? Или сигналы Qt, Boost.Signals и sigc ++?)

1 голос
/ 11 мая 2009

Qt - это библиотека, которая должна поддерживать широкий спектр компиляторов. Он все еще поддерживает MSVC6, например (Я думаю, что Qt Software постепенно прекращает поддержку для этого). Это ограничивает более современные возможности C ++, которые может использовать Qt.

Но это не значит, что вы не можете использовать их в своей программе Qt.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...