Модераторы: PILOT

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> нужен С++ программист среднего уровня 
:(
    Опции темы
Fantasist
Дата 9.8.2004, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


Профиль
Группа: Участник Клуба
Сообщений: 1517
Регистрация: 24.3.2002

Репутация: 1
Всего: 41



Да что там говорить, асм совсем для других вещей предназначен.

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

Код

class BaseClass
{
public:
virtual ~BaseClass() {};
string getType() {return typeid(*this).name();};
virtual Serialize(StreamSerializer& serializer)=0;
};

class CClassFactory
{
private:
  typedef BaseClass* (*CreatorFunc)();
  static map<string,CreatorFunc> m_Creators;

public:

 template <class T>
 static BaseClass* CreateClass()
 { return new T(); }

 static BaseClass* Create(string typeName) throws Exeption
 {
CreatorFunc creator = m_Creators[typeName];
if (creator==NULL) throw Exeption("Creator for "+typeName+" is not found");
return creator();
 }

 static void AddCreator(string typeName, CreatorFunc func)
 {
  m_Creators[typeName] = func;
 }

 template <class T>
 static void RegiserCreator()
 {
  AddCreator(typeid(T).name(), CreateClass<T>);
 }
};

map<string,CClassFactory::CreatorFunc> CClassFactory::m_Creators;


template <class T>
class Creator
{
public:
Creator() {CClassFactory::RegiserCreator<T>();}
};

#define IMPLEMENT_CREATOR(class_name) Creator<class_name> class_name##CreatorStub


class Derived: public BaseClass
{
};

IMPLEMENT_CREATOR(Derived);


К вопросу о расширяемости.


--------------------
Волны гасят ветер...
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Обсуждение работы | Следующая тема »


 




[ Время генерации скрипта: 0.0421 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.