размышления о Qt, STL и pragma |
Здравствуйте, гость ( Вход | Регистрация )
размышления о Qt, STL и pragma |
Алексей1153 |
19.7.2010, 17:13
Сообщение
#1
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
[offtop]
Раскрывающийся текст У меня вот парочка глюпых вопросов возникла Кстати, 1) а зачем вставлять Q_OBJECT, если нет своих слотов и сигналов ? Или это "дёшево" ? 2) зачем используется неуклюжая конструкция #ifndef BUTTON_H #define BUTTON_H #endif , если есть #pragma once ? 3) чем использование QMap лучше std::map ? (привычно для меня как то последнее) отделено от темы: Создание неограниченного количества элементов |
|
|
DEADHUNT |
19.7.2010, 17:24
Сообщение
#2
|
Активный участник Группа: Участник Сообщений: 430 Регистрация: 15.4.2009 Пользователь №: 686 Спасибо сказали: 26 раз(а) Репутация: 2 |
если для тебя привычнее std::map (то есть pure C++), то почему лучше использовать не стандартную директиву препроцессора #pragma once ?
|
|
|
Алексей1153 |
19.7.2010, 17:28
Сообщение
#3
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
то почему лучше использовать не стандартную директиву препроцессора #pragma once ну, во первых, прагма удобнее, а во вторых - насчёт стандартности не знаю, но вот, к примеру, студийный компилятор (имеется в виду также и VS6) эта прагма уже использовалась, думаю, за 12 то лет люди должны были оценить удобство Сообщение отредактировал Алексей1153 - 19.7.2010, 17:30 |
|
|
Litkevich Yuriy |
19.7.2010, 19:56
Сообщение
#4
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
1) а зачем вставлять Q_OBJECT, если нет своих слотов и сигналов ? Или это "дёшево" ? Это общая рекомендация тролей. когда слоты понадобятся, не нужно будет вызывать qmake вручную. Что значит "дёшево"?2) зачем используется неуклюжая конструкция все компиляторы поддерживают #pragma once? и что это такое? Как работает стандартная защита от множественного включения знают большинство.#ifndef BUTTON_H #define BUTTON_H #endif , если есть #pragma once чем использование QMap лучше std::map ? (привычно для меня как то последнее) в комплекте с QMap Qt предоставляет два типа итераторов, STL-подобные и Java-подобные
|
|
|
DEADHUNT |
19.7.2010, 20:05
Сообщение
#5
|
Активный участник Группа: Участник Сообщений: 430 Регистрация: 15.4.2009 Пользователь №: 686 Спасибо сказали: 26 раз(а) Репутация: 2 |
Что значит "дёшево"? значит то что не будет дополнительных затрат памяти и ещё чего-то(например не будут выполняться какие-то дополнительные функции). в комплекте с QMap Qt предоставляет два типа итераторов, STL-подобные и Java-подобные и это аргумент? Qt не входит в STL и смысл его использовать если он делает то же самое что и std::map, получается что QMap бесполезное дублирование std::map(наверное что бы осложнить переход с Qt). |
|
|
Litkevich Yuriy |
19.7.2010, 20:14
Сообщение
#6
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
igor_bogomolov |
20.7.2010, 2:49
Сообщение
#7
|
Профессионал Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29 |
1.
Это общая рекомендация тролей. когда слоты понадобятся, не нужно будет вызывать qmake вручную. Что значит "дёшево"? Добавлю только, что Q_OBJECT нужен не только для сигнал-слотового взаимодействия, а везде где может потребоваться метообъектная информация (qobject_cast, tr, property system и т.д.)2. Раз #pragma - значит зависит от компилятора, что не есть хорошо. К тому же конструкцию понимают все, это уже некий стандарт.3. и это аргумент? Qt не входит в STL и смысл его использовать если он делает то же самое что и std::map, получается что QMap бесполезное дублирование std::map(наверное что бы осложнить переход с Qt). Как то вы слишком категоричны. У всего есть свои преимущества и недостатки. Важно их правильно использовать.Для меня главное преимущество QTL, как и всего Qt - это удобство использования. Qt предоставляет удобные интерфейсы, которые значительно сокращают время разработки, снижая требования к исполнителю. К тому же, при написании программы, хочется обеспечить некое единство стиля. Поэтому мне не нравится смешивание в одном коде контейнеров Qt и stl. Поэтому если программа пишется с использованием Qt, я стараюсь использовать QTL. В качестве дополнения видержка из assistent'a Цитата Контейнерные классы - классы с неявным совместным использованием данных, они реентерабельны, и они оптимизированы для быстрой работы, низкого потребления памяти и минимального увеличения кода (inline), результат в меньшем исполняемом файле. Кроме того, они потоко-безопасны в ситуациях, где они используются, как контейнеры только для чтения, всеми потоками используемыми для доступа к ним.
Для обхода элементов, хранящихся в контейнере, вы можете использовать один из двух типов итераторов: итераторы в стиле Java и итераторы в стиле STL. Итераторы в стиле Java легче использовать и они предоставляют высокоуровневую функциональность, тогда как итераторы в стиле STL немного более эффективны и могут быть использованы вместе с базовыми алгоритмами Qt и STL. Qt также предоставляет конструкцию foreach, которая позволяет очень легко перебрать все элементы, хранящиеся в контейнере |
|
|
haiflive |
20.7.2010, 4:15
Сообщение
#8
|
Студент Группа: Участник Сообщений: 37 Регистрация: 8.7.2010 Пользователь №: 1868 Спасибо сказали: 1 раз(а) Репутация: 0 |
Ну собствено поясню, программирую на PHP и сейчас пишу программу на C++ и использую фреймворк QT, так что мне удобнее использовать QT_STL, так как они описаны в книге(QT4.5), и хоть как-то походят на PHP, к то му же процетированный выше открывок из книги, убедил меня (ранее) изучать STL от QT..
Сказал же, что я новичёк, C++ не так давно изучил.. А сколько книг вы прочли по QT?. И посоветуйте пожалуйста мне "современную" книгу по С++ где описаны "#pragma once" и тп Цитата Сказал же, что я новичёк, C++ не так давно изучил.. ..тоесть начал изучать Где тут вообще кнопка редактирования собственного поста? |
|
|
Litkevich Yuriy |
20.7.2010, 4:37
Сообщение
#9
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
Алексей1153 |
20.7.2010, 12:53
Сообщение
#10
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
Сделал для себя выводы:
То есть понятно: stl можно дальше продолжать использовать, Q_OBJECT лучше всегда ставить, а прагму - проверить, поддерживает ли компилятор |
|
|
Текстовая версия | Сейчас: 30.11.2024, 6:14 |