Russian Qt Forum
Ноябрь 12, 2024, 00:58 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Карта с метатипами на qt  (Прочитано 8270 раз)
Познающий Дао QML
Гость
« : Март 07, 2013, 08:44 »

Как реализовать подобный функционал в рамках Qt без "лишних телодвиджений"

на примере псевдокода:
Код:
class Handler {};

class MyHandler : public Handler {};

Handler getHandler(HandlerType t);

MyHandler myHandler = getHandler(MyHandler::Type);

Думаю должно быть что-то готовое...
« Последнее редактирование: Март 07, 2013, 13:00 от Познающий Дао QML » Записан
carrygun
Гость
« Ответ #1 : Март 07, 2013, 09:05 »

Енумы? Или я чтото не понял?
Записан
Bepec
Гость
« Ответ #2 : Март 07, 2013, 09:12 »

Непонятный вопрос, приведён непонятный код. Чего то всё непонятно.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Март 07, 2013, 10:41 »

Думаю должно быть что-то готовое...
Думаю что не должно т.к. в языке такого нет, объект возвращаемый по значению имеет свой, фиксированный тип
Записан
Bepec
Гость
« Ответ #4 : Март 07, 2013, 13:10 »

Не, ну в принципе он наследника может возвращать по типу как бы.

В одном проекте у меня похоже сделано - имеются ноды различных типов с общим предком. И при создании можно написать
Код:
MyStructNode * tempPoint = *::StructNode.newNode(*::TypeNode);
//StructNode - предок,
//MyStructNode - наследуется от него

PS или я чего то не понимаю? нужен ТС для разборки Веселый
Записан
Познающий Дао QML
Гость
« Ответ #5 : Март 07, 2013, 13:30 »

Енумы? Или я чтото не понял?

Т.е. заранее задать список классов? - такой вариант мне не подходит...

Я так понял нужно использовать что-то типа:
Код:
int QMetaType::type(const char * typeName) [static] 
в связке с макросами...

Да наследование есть... дело не в наследовании и в возвращаемом значении...
Дело в получении объекта из мапа по типу класса.

Аналогия из джава:

Код:
Map<Class, Object> map; map.get(MyClass.class);

Конечно можно вместо типа подставлять строку, - вот только в qt, как я понял, строки не кэшируются в рантайме, - поэтому хэш строки будет каждый раз заново вычисляться...

Вот и получается что с++ это какое-то недо ооп... т.е. классы как бы есть, а универсальной мета-системы нет иначеб зачем создатели Qt плодили ненужные сущности типа QMetaType Подмигивающий
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #6 : Март 07, 2013, 13:34 »

Вот и получается что с++ это какое-то недо ооп... т.е. классы как бы есть, а универсальной мета-системы нет иначеб зачем создатели Qt плодили ненужные сущности типа QMetaType Подмигивающий
Поищи в интернете про фабрики объектов...
Записан
Познающий Дао QML
Гость
« Ответ #7 : Март 07, 2013, 13:55 »

Поищи в интернете про фабрики объектов...
И что мне это даст? - мне не нужно создавать объект! Подмигивающий
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #8 : Март 07, 2013, 14:03 »

мне не нужно создавать объект! Подмигивающий
Ok. Тогда что нужно точно. Получить копию объекта из мапа, получить ссылку (константную) на объект из мапа?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #9 : Март 07, 2013, 14:08 »

PS или я чего то не понимаю?
Ах как Вы давеча девушку шпыняли, дескать "непонимание принципа работы С++" и все такое. А сам? Улыбающийся Чего же путать возвращаемый объект с указателем? Вернуть указатель/ссылку на полиморфный тип можно, а вот объект нет. Да и возвращать объекты по значению, вообще говоря, плохо, это здесь с имплисит шарой распустились, а в том же STL быстро по рогам получите.

Т.е. заранее задать список классов? - такой вариант мне не подходит...
А придется так или иначе создавать фабрику (или ее подобие)

Вот и получается что с++ это какое-то недо ооп... т.е. классы как бы есть, а универсальной мета-системы нет иначеб зачем создатели Qt плодили ненужные сущности типа QMetaType Подмигивающий
Холивар "какой язык лучше" не имеет смысла. Не нравится - не пишите на плюсах  
Записан
Познающий Дао QML
Гость
« Ответ #10 : Март 07, 2013, 14:45 »

А еще говорят у программистов плохо развито воображение Подмигивающий

... блин написано же было на примере псевдокода ...

Хорошо др. пример карты с метатипами на qt:
Код:
QMap<MetaTypeId, QString> map;

Как получить MetaTypeId я уже без вас понял, осталось понять как и где его хранить
чтобы приблизиться к функционалу MyHandler::Type - т.е. в статистической область видимости класса MyHandler...
А не глобальная с предопределением (т.е. использование перечислений в базовом классе или общем файле).
Записан
ViTech
Гипер активный житель
*****
Offline Offline

Сообщений: 858



Просмотр профиля
« Ответ #11 : Март 07, 2013, 15:01 »

QMetaObject и его newInstance смотрели?

На вопрос
Ok. Тогда что нужно точно. Получить копию объекта из мапа, получить ссылку (константную) на объект из мапа?
так и не ответили. Что нужно-то в конечном итоге? Лучше на словах, без псевдокодов.
Записан

Пока сам не сделаешь...
Познающий Дао QML
Гость
« Ответ #12 : Март 07, 2013, 15:05 »

даже метод с префиксом "get" а не "new" (create) - вот и почему ваше воображение подумало, что мне нужна "фабрика классов" Подмигивающий

В общем ничего больше не нужно...

Вот и приходится осваивать с++ Qt так как не можем найти вменяемых разработчиков Подмигивающий
Записан
ViTech
Гипер активный житель
*****
Offline Offline

Сообщений: 858



Просмотр профиля
« Ответ #13 : Март 07, 2013, 15:15 »

Если объекты создавать не надо, значит они у вас уже есть. Как вы их в map/hash/... положите, с каким идентификатором, так и извлекайте, в чем проблема?

Вменяемых разработчиков вы вряд ли найдете, пока не научитесь вменяемо задачи и вопросы формулировать Подмигивающий.
Записан

Пока сам не сделаешь...
Bepec
Гость
« Ответ #14 : Март 07, 2013, 16:36 »

Весёлый паренёк.

Поставил непонятную задачу. Покритиковал людей и смылся Веселый
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 5.123 секунд. Запросов: 23.