как создать класс по имени?
От: povod571 Россия  
Дата: 31.07.03 07:54
Оценка:
как создать класс имея его
имя в текстовом представлении?
Re: как создать класс по имени?
От: Аноним  
Дата: 31.07.03 07:56
Оценка:
Здравствуйте, povod571, Вы писали:

P>как создать класс имея его

P>имя в текстовом представлении?

Создай класс-фабрику, которая будет разбирать имена и создавать объекты соответствующих классов.
Re[2]: как создать класс по имени?
От: povod571 Россия  
Дата: 31.07.03 08:23
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, povod571, Вы писали:


P>>как создать класс имея его

P>>имя в текстовом представлении?

А>Создай класс-фабрику, которая будет разбирать имена и создавать объекты соответствующих классов.


Пошлите меня пожалуйста куданить за примерчиком!
Re[2]: как создать класс по имени?
От: povod571 Россия  
Дата: 31.07.03 08:25
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, povod571, Вы писали:


P>>как создать класс имея его

P>>имя в текстовом представлении?

А>Создай класс-фабрику, которая будет разбирать имена и создавать объекты соответствующих классов.


в Таком случае придётся переписывать фабрику при добавлении новых классов???
Re[3]: как создать класс по имени?
От: Анатолий Широков СССР  
Дата: 31.07.03 08:28
Оценка:
P>Пошлите меня пожалуйста куданить за примерчиком!

http://www.rsdn.ru/Forum/Message.aspx?mid=130926&only=1
Автор: Анатолий Широков
Дата: 13.11.02
Re: как создать класс по имени?
От: vvaizh http://izh-test.sourceforge.net/
Дата: 31.07.03 08:31
Оценка:
Здравствуйте, povod571, Вы писали:

P>как создать класс имея его

P>имя в текстовом представлении?

ещё вариант:
юзать runtime class в виде макросов
пример можно посмотреть в MFC..
его же можно использовать..
могу свои примеры послать..
http://izh-test.sourceforge.net/russian/introduction.html
Re: как создать класс по имени?
От: Кодт Россия  
Дата: 31.07.03 08:41
Оценка:
Здравствуйте, povod571, Вы писали:

P>как создать класс имея его

P>имя в текстовом представлении?

Примерчик — библиотека MFC.

Иерархия классов CObject, макрос DECLARE_DYNCREATE (регистрирует класс в системе метаклассов). И проч.
Перекуём баги на фичи!
Re[2]: как создать класс по имени?
От: povod571 Россия  
Дата: 31.07.03 08:54
Оценка:
Здравствуйте, vvaizh, Вы писали:

V>Здравствуйте, povod571, Вы писали:


P>>как создать класс имея его

P>>имя в текстовом представлении?

V>ещё вариант:

V>юзать runtime class в виде макросов
V>пример можно посмотреть в MFC..
V>его же можно использовать..
V>могу свои примеры послать..
Буду примного благодарен
Re[3]: как создать класс по имени?
От: Аноним  
Дата: 31.07.03 09:12
Оценка:
Здравствуйте, povod571, Вы писали:

P>в Таком случае придётся переписывать фабрику при добавлении новых классов???


Не обязательно, если классы смогут себя регистрировать на фабрике.
Re[2]: как создать класс по имени?
От: povod571 Россия  
Дата: 31.07.03 09:12
Оценка:
Здравствуйте, vvaizh, Вы писали:

V>Здравствуйте, povod571, Вы писали:


P>>как создать класс имея его

P>>имя в текстовом представлении?

V>ещё вариант:

V>юзать runtime class в виде макросов
V>пример можно посмотреть в MFC..
V>его же можно использовать..
V>могу свои примеры послать..
Буду примного благодарен
Re[4]: как создать класс по имени?
От: Аноним  
Дата: 31.07.03 09:28
Оценка:
P>>в Таком случае придётся переписывать фабрику при добавлении новых классов???

А>Не обязательно, если классы смогут себя регистрировать на фабрике.


Довольно характерный в этом отношении пример — COM. Инфраструктура COM играет роль фабрики, и способна "произвести на свет" объект любого класса, зарегистрированного в реестре под своим идентификатором CLSID.
Re[4]: как создать класс по имени?
От: povod571 Россия  
Дата: 04.08.03 09:29
Оценка:
Здравствуйте, Анатолий Широков, Вы писали:

P>>Пошлите меня пожалуйста куданить за примерчиком!


АШ>http://www.rsdn.ru/Forum/Message.aspx?mid=130926&only=1
Автор: Анатолий Широков
Дата: 13.11.02


не проментируете пару строчек: я немного запутался — в какой момент происходит регистрация?!
пример работает отлично!!!
в своём коде я поставил DECLARE_FACTORY в описаниях классов — так-же как и у вас, а IMPLEMENT_FACTORY в CPP файлах определением мотодов — в итоге классы не регистрируются
Re[5]: как создать класс по имени?
От: Анатолий Широков СССР  
Дата: 04.08.03 10:04
Оценка:
P>не проментируете пару строчек: я немного запутался — в какой момент происходит регистрация?!

При инициализации статических переменных классов factory — порядок инициализации не определен. См. IMPELEMENT_FACTORY.

P>в своём коде я поставил DECLARE_FACTORY в описаниях классов — так-же как и у вас, а IMPLEMENT_FACTORY в CPP файлах определением мотодов — в итоге классы не регистрируются


Ваш код можно посмотреть?
Re[6]: как создать класс по имени?
От: povod571 Россия  
Дата: 04.08.03 10:28
Оценка:
Здравствуйте, Анатолий Широков, Вы писали:

P>>не проментируете пару строчек: я немного запутался — в какой момент происходит регистрация?!


АШ>При инициализации статических переменных классов factory — порядок инициализации не определен. См. IMPELEMENT_FACTORY.


P>>в своём коде я поставил DECLARE_FACTORY в описаниях классов — так-же как и у вас, а IMPLEMENT_FACTORY в CPP файлах определением мотодов — в итоге классы не регистрируются


АШ>Ваш код можно посмотреть?


44Kb — очень благодарен
здесь
Re[7]: как создать класс по имени?
От: Анатолий Широков СССР  
Дата: 04.08.03 10:44
Оценка:
Поступим следующим образом:


Возьмите реализацию DECLARE_FACTORY и ENSURE_CREATE из http://www.rsdn.ru/Forum/Message.aspx?mid=132584&only=1
Автор: Анатолий Широков
Дата: 15.11.02
.

Код библиотеки перепишется следующим образом:

#ifndef sample_h
#define sample_h


#include <iostream>
#include "factory.h"

class Base
{
public:
    virtual ~Base() {}
    virtual void func() const = 0;
};
class Der1 : public Base
{
public:
    void func() const
    {
        std::cout << "Der1::func\n";
    }
    DECLARE_FACTORY(Der1, Base)
};

ENSURE_CREATE(Der1, Base)

class Der2 : public Base
{
public:
    void func() const
    {
        std::cout << "Der2::func\n";
    }
    
    DECLARE_FACTORY(Der2, Base)
};

ENSURE_CREATE(Der2, Base)

#endif


Все (да, IMPLEMENT_FACTORY — удалите из кода, он больше не понадобится)
Re[8]: как создать класс по имени?
От: povod571 Россия  
Дата: 04.08.03 11:09
Оценка:
Здравствуйте, Анатолий Широков, Вы писали:

АШ>Поступим следующим образом:



АШ>Возьмите реализацию DECLARE_FACTORY и ENSURE_CREATE из http://www.rsdn.ru/Forum/Message.aspx?mid=132584&amp;only=1
Автор: Анатолий Широков
Дата: 15.11.02
.


АШ>Код библиотеки перепишется следующим образом:


АШ>Все (да, IMPLEMENT_FACTORY — удалите из кода, он больше не понадобится)


Спасибо!
Re: как создать класс по имени?
От: sebastian  
Дата: 09.03.05 10:36
Оценка:
Здравствуйте, povod571, Вы писали:

P>как создать класс имея его

P>имя в текстовом представлении?

Читать Modern C++ design и использовать Loki::Factory.
Re: как создать класс по имени?
От: hth  
Дата: 09.03.05 11:51
Оценка:
Здравствуйте, povod571, Вы писали:

P>как создать класс имея его

P>имя в текстовом представлении?

еще один вопрос связанный с "Reflection for C++" обсуждаемый
последние пару дней.

В случае с CINT (http://root.cern.ch/root/Cint.html),
который обеспечивает "full RTTI" и CINT API это делается так:

MyClass *new_my_class = (MyClass*)G__calc("new MyClass()");
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.