crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

3 страниц V   1 2 3 >  
Ответить в данную темуНачать новую тему
> размышления о 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 ? (привычно для меня как то последнее)
[/offtop]

отделено от темы: Создание неограниченного количества элементов
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
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  


Цитата(DEADHUNT @ 19.7.2010, 20:24) *
то почему лучше использовать не стандартную директиву препроцессора #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  


Цитата(Алексей1153 @ 19.7.2010, 21:13) *
1) а зачем вставлять Q_OBJECT, если нет своих слотов и сигналов ? Или это "дёшево" ?
Это общая рекомендация тролей. когда слоты понадобятся, не нужно будет вызывать qmake вручную. Что значит "дёшево"?

Цитата(Алексей1153 @ 19.7.2010, 21:13) *
2) зачем используется неуклюжая конструкция
#ifndef BUTTON_H
#define BUTTON_H
#endif
, если есть #pragma once
все компиляторы поддерживают #pragma once? и что это такое? Как работает стандартная защита от множественного включения знают большинство.

Цитата(Алексей1153 @ 19.7.2010, 21:13) *
чем использование QMap лучше std::map ? (привычно для меня как то последнее)
в комплекте с QMap Qt предоставляет два типа итераторов, STL-подобные и Java-подобные
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DEADHUNT
  опции профиля:
сообщение 19.7.2010, 20:05
Сообщение #5


Активный участник
***

Группа: Участник
Сообщений: 430
Регистрация: 15.4.2009
Пользователь №: 686

Спасибо сказали: 26 раз(а)




Репутация:   2  


Цитата(Litkevich Yuriy @ 19.7.2010, 20:56) *
Что значит "дёшево"?

значит то что не будет дополнительных затрат памяти и ещё чего-то(например не будут выполняться какие-то дополнительные функции).

Цитата(Litkevich Yuriy @ 19.7.2010, 20:56) *
в комплекте с 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  


Цитата(DEADHUNT @ 20.7.2010, 0:05) *
и это аргумент?
да
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 20.7.2010, 2:49
Сообщение #7


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


1.
Цитата(Litkevich Yuriy @ 19.7.2010, 21:14) *
Это общая рекомендация тролей. когда слоты понадобятся, не нужно будет вызывать qmake вручную. Что значит "дёшево"?
Добавлю только, что Q_OBJECT нужен не только для сигнал-слотового взаимодействия, а везде где может потребоваться метообъектная информация (qobject_cast, tr, property system и т.д.)

2.
Раз #pragma - значит зависит от компилятора, что не есть хорошо. К тому же конструкцию
#ifndef BUTTON_H
#define BUTTON_H
#endif
понимают все, это уже некий стандарт.

3.
Цитата(DEADHUNT @ 19.7.2010, 21:05) *
и это аргумент? 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  


Цитата(haiflive @ 20.7.2010, 8:15) *
Где тут вообще кнопка редактирования собственного поста?
появится, когда 20 сообщений наберёшь
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 20.7.2010, 12:53
Сообщение #10


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Сделал для себя выводы:
То есть понятно: stl можно дальше продолжать использовать, Q_OBJECT лучше всегда ставить, а прагму - проверить, поддерживает ли компилятор :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

3 страниц V   1 2 3 >
Ответить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 30.12.2024, 20:52