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

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

Страниц: 1 [2] 3   Вниз
  Печать  
Автор Тема: metaobject()  (Прочитано 20143 раз)
BuRn
Гость
« Ответ #15 : Март 03, 2012, 23:49 »

Что-то я запутался, но для этого:
начальная суть вообще по имени класса создать объект с таким типом

можно посмотреть на:
int QMetaType::type ( const char * typeName ) [static]
void * QMetaType::construct ( int type, const void * copy = 0 ) [static]
но construct возвращает void, все равно не зная имени, а точнее знаем мы его только в виде строки , как преобразовать в нужному непонятно
Записан
mutineer
Гость
« Ответ #16 : Март 04, 2012, 00:00 »

но construct возвращает void, все равно не зная имени, а точнее знаем мы его только в виде строки , как преобразовать в нужному непонятно

А указатель, в который ты полученный объект сохранять планируешь, какого типа будет?
Записан
BuRn
Гость
« Ответ #17 : Март 04, 2012, 00:01 »

но construct возвращает void, все равно не зная имени, а точнее знаем мы его только в виде строки , как преобразовать в нужному непонятно

А указатель, в который ты полученный объект сохранять планируешь, какого типа будет?
так в том то вся и проблема , хотелось бы тупо со строки QString name="MyClass"; создать объект MyClass a ;к примеру
Записан
mutineer
Гость
« Ответ #18 : Март 04, 2012, 00:04 »

как ты собираешься это использовать? предположим ты написал такой метод. И что с ним делать?

Непонимающий?? *pointer = createObjectOfClass("MyClass");

что вместо знаков вопроса писать планируешь?
Записан
BuRn
Гость
« Ответ #19 : Март 04, 2012, 00:06 »

как ты собираешься это использовать? предположим ты написал такой метод. И что с ним делать?

Непонимающий?? *pointer = createObjectOfClass("MyClass");

что вместо знаков вопроса писать планируешь?
в этом то вся и проблема
Записан
mutineer
Гость
« Ответ #20 : Март 04, 2012, 00:08 »

Боюсь в этом языке задача невозможна именно в таком виде. Разве что пронаследовать всех от одного базового класса (QObject, например) и безусловно кастовать указатель полученный к нему

Ну или может поможет какая-нить жуткая шаблонная магия. Я в ней не особо силен
« Последнее редактирование: Март 04, 2012, 00:12 от mutineer » Записан
fuCtor
Гость
« Ответ #21 : Март 04, 2012, 12:59 »

Если правильно понял, то чем-то похоже на IoC: http://qtioccontainer.sourceforge.net/
Еще было решение, QNimbleContainer называлось, тоже вариант реализации IoC, только вот что-то все следы в инете о нем пропали, если интересны будут исходники, могут выложить (на работе сохранилось)
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #22 : Март 04, 2012, 14:07 »

Ну или может поможет какая-нить жуткая шаблонная магия. Я в ней не особо силен
Я (мельком) видел что-то похожее в книге Александреску. Ну типа как клонировать объект или создавать экземпляр без явного указания типа. Может имеет смысл прильнуть к теории.
Записан
Sahab
Гость
« Ответ #23 : Март 04, 2012, 15:19 »

Четко сформулировать вопрос еще раз можно?
а то как-то по топику размазана логика.
Записан
BuRn
Гость
« Ответ #24 : Март 04, 2012, 15:34 »

Четко сформулировать вопрос еще раз можно?
а то как-то по топику размазана логика.
есть строка , пример :QString name = "MyClass" ; нужно создать класс с типом , который хранится в переменной name, т.е. MyClass
Записан
BRE
Гость
« Ответ #25 : Март 04, 2012, 15:40 »

есть строка , пример :QString name = "MyClass" ; нужно создать класс с типом , который хранится в переменной name, т.е. MyClass
Предположим создали, что ты дальше с ним делать планируешь?
Записан
BuRn
Гость
« Ответ #26 : Март 04, 2012, 15:49 »

виртуальными методами пользоваться
Записан
Sahab
Гость
« Ответ #27 : Март 04, 2012, 17:31 »

Код:
int id = QMetaType::type("MyClass");
QObjectOrDerivedFromQObject* obj = QMetaType::construct ( id );
ну и конечно почитать на тему Q_DECLARE_METATYPE()
Записан
BuRn
Гость
« Ответ #28 : Март 04, 2012, 17:44 »

Код:
int id = QMetaType::type("MyClass");
QObjectOrDerivedFromQObject* obj = QMetaType::construct ( id );
ну и конечно почитать на тему Q_DECLARE_METATYPE()
не совсем то ...
Записан
BRE
Гость
« Ответ #29 : Март 04, 2012, 17:45 »

не совсем то ...
Почему?
Записан
Страниц: 1 [2] 3   Вверх
  Печать  
 
Перейти в:  


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