Название: Преобразования типов Отправлено: Steven_Orko от Февраль 21, 2006, 14:30 Вот имеются несколько своих типов:
Код: class QLICLSmallInt; //Целое число (значения от -32.768 до +32.767); Хотел посоветоваться со всеми. Кто как считает, какие преобразования между ними, а также со встроенными типами и типами Qt лучше определить для удобной работы? P.S. Вопрос: "Зачем создал аналоги встроенных типов?". Отвечаю: Не устраивало их поведение, а также плохо понятный синтаксис использования в некоторых случаях. Название: Преобразования типов Отправлено: Hordi от Февраль 21, 2006, 17:31 Для удобной работы лучше никаких синонимов базовых типов вообще не создавать. Выглядит ужасно, писать много, и в итоге непонятно зачем.
Название: Преобразования типов Отправлено: Steven_Orko от Февраль 21, 2006, 18:56 Цитата: "Hordi" Для удобной работы лучше никаких синонимов базовых типов вообще не создавать. Выглядит ужасно, писать много, и в итоге непонятно зачем. Очень полезное замечание, особенно принимая во внимание то, что я написал в P.S. Эти типы уже есть. Вопрос ставится по поводу преобразований. Какие уместно, удобно было бы ввести для более наглядного, удобного использования (и интеграции во множество встроенных) указанных типов? Название: Преобразования типов Отправлено: Hordi от Февраль 21, 2006, 20:08 Так ведь это все пройденны этап! Кроме гемороя для себя и, особенно, других, ничего не дает. Какие могут быть рекомендации? Ну напиши операторы приведения к любому типу - больше вариантов и быть не может.
Единственное, что я могу понять, так это определение денежного типа, т.к. при использовании double постоянно округление нужно использовать, да и еще подводных кмней много, но писать КЛАСС! для bool-типа - это слишком. добавлено спустя 2 минуты: Давай твой P.S. покопаем: 1.Какое поведение базовых типов не устраивает? 2.Какой такой НЕПОНЯТНЫ синтаксис использования в НЕКОТОРЫХ случаях? Может все решится и без переопределения типов... Название: Преобразования типов Отправлено: Steven_Orko от Февраль 21, 2006, 20:45 Цитата: "Hordi" Давай твой P.S. покопаем: 1.Какое поведение базовых типов не устраивает? 2.Какой такой НЕПОНЯТНЫ синтаксис использования в НЕКОТОРЫХ случаях? Может все решится и без переопределения типов... Окей. Какой фундаментальный, встроенный тип можно использовать для хранения вещественного значения c фиксированной точкой, имея при этом в целой части 20 цифр, а в вещественной 10? Фундаментальные классы нельзя встроить в свою иерархию классов. И нельзя сказать компилятору, что его фундаментальный тип double теперь я хочу рассматривать всего лишь как наследник базового типа, например, BaseType. Соответственно, я не могу переопределить их (типы) таким образом, чтобы обеспечить в известной степени полиморфизм для моих функций, методов классов, которые используют (должны по идее) указанные выше типы данных. К тому идеологически, ИМХО, более верно создать не библиотеку функций, работающих с конкретным типом данных, а, например, класс. Но это я уже пошел к идеологии объектно-ориентированного программирования. "Это уже проходили" - ага, и проходим снова, так как те же Trolltech в своем продукте переназывают, а в некоторых случают, переопределяют типы, создают свои, новые... Следую выше приведенному топику, зачем они (тролли) создали свой QVariant, а не использовали для этого обычное union? А именно потому что использование объекта класса QVariant хорошо вписывается в идеологиию объектно-ориентированного программирования, но ни как не переменная типа union. Хотя в некоторых случаях ее тоже можно трактовать как класс, правда с большими ограничениями для все той же идеологии. Если кратко, то вот причина создания своих типов данных, в чем-то схожих с фундаментальными, но только схожих. По большому счету, мои классы расширяют их и позволяют работать со значениями, используя более наглядный синтаксис. Название: Преобразования типов Отправлено: Hordi от Февраль 21, 2006, 21:05 Ты говоришь о вещественном типе 20.10, а определяешь свой класс для bool! Универсального ничего нет. Посмотри на Microsoft - у них использовалась просто венгерская нотация, но им нужно было определить какой нибудь стандарт, т.к. коллектив большой. Честно говоря, я ни разу не встречал полного классового переопределения базовых типов - это уже язык новый получится.
Еще раз повторю: для денежных типов, огромных чисел или наоборот-очень маленьких, короче для специализированых задач нужно разрабатывать свои классы, но у тебя не тот случай. Не нужно путать QVariant с union и передергивать принципиально разные вещи. Я же не говорю тебе что все типы нужно заменить на void*. Если ты внимательно посмотришь на библиотеку qt, то заметишь, что qvariant в основном используется при работе с базой данных, т.е. в случае, когда значения полей получаются произвольных типов. Иерархия здесь абсолютно ни при чем, просто кроме QVariant ничего не подойдет. > работать со значениями, используя более наглядный синтаксис Ты считаешь, что этот набор типов сделает синтаксис более наглядным?Ты в это веришь? Название: Преобразования типов Отправлено: Steven_Orko от Февраль 21, 2006, 21:30 Ну, в армии есть такой принцип - "единообразие" ))) Некоторые типы я определяю именно для него. К тому же, повторюсь, я добавляю им специальную семантику. Согласен, получается новый язык в языке... но это касается всех специализированных библиотек. Тоже самое можно сказать и про STL. Согласен про огромные числа, денежные типы и т.л.
QVariant у троллей внутри себя использует union, можно считать, что это сложная оберка к объединению. Да, он в основном, используется при работе с БД. Моя тематика та же. По поводу синтаксиса. Здесь не может быть абсолютно правильного мнения. Например, я считаю, что нагляднее иметь функцию-член setNum() для преобразования числа в строку, чем три-четыре строки,используя C-типы и функцию преобразования itoa. К этому еще необходимо прибавить код на проверку корректности преобразования. |