Необходимо преобразовать следующий код:
//CObjBase является базовым классом CObj1,CObj2,CObj3
CObj1 * o1 = new CObj1();
CObj2 * o2 = new CObj2();
CObj3 * o3 = new CObj3();
А хотелось бы получить код эквивалентный примеру выше но в следующем виде:
CObjBase* objArr[3];
for (i=0;i<3;i++)
{
objArr[i] = new arrOfClasses[i]();
}
Вопрос в том как объявить массив классов arrOfClasses и как его заполнить.
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Здравствуйте, Механик, Вы писали:
М>Вопрос в том как объявить массив классов arrOfClasses и как его заполнить.
Тебе нужен не массив классов, а массив порождающих функций (фабрик).
Самое простое:
typedef CObjBase* (*make_object_t)(void); // тип фабрики
template<class T> // шаблон - чтобы не писать тучу однообразных функций
CObjBase* make_object(void) // сигнатура отвечает типу make_object_t
{
return new T();
}
.....
// массив фабрик
make_object_t make_objects[3] = { make_object<CObj1>, make_object<CObj2>, make_object<CObj3> };
.....
CObjBase* objects[3];
for(i=0; i<3; ++i) objects[i] = (make_objects[i])(); // вызываем фабрики
Фабрики можно сделать и в виде объектов-функторов, и в виде классов, реализующих интерфейс (как, например, в COM)...
Здравствуйте, Кодт, Вы писали:
К>Здравствуйте, Механик, Вы писали:
М>>Вопрос в том как объявить массив классов arrOfClasses и как его заполнить.
К>Тебе нужен не массив классов, а массив порождающих функций (фабрик).
К>Самое простое:
К>К>typedef CObjBase* (*make_object_t)(void); // тип фабрики
К>template<class T> // шаблон - чтобы не писать тучу однообразных функций
К>CObjBase* make_object(void) // сигнатура отвечает типу make_object_t
К>{
К> return new T();
К>}
К>.....
К>// массив фабрик
К>make_object_t make_objects[3] = { make_object<CObj1>, make_object<CObj2>, make_object<CObj3> };
К>.....
К>CObjBase* objects[3];
К>for(i=0; i<3; ++i) objects[i] = (make_objects[i])(); // вызываем фабрики
К>
К>Фабрики можно сделать и в виде объектов-функторов, и в виде классов, реализующих интерфейс (как, например, в COM)...
Так а где бы можно было узнать про объекты-функторы...
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Здравствуйте, Механик, Вы писали:
К>>Фабрики можно сделать и в виде объектов-функторов, и в виде классов, реализующих интерфейс (как, например, в COM)...
М>Так а где бы можно было узнать про объекты-функторы...
Чтение хороших книг по С++ (начиная с
АлександрескуАвтор(ы): Андрей Александреску
В книге изложена новая технология программирования, представляющая собой сплав обобщенного программирования, метапрограммирования шаблонов и объектно- ориентированного программирования на С++. Настраиваемые компоненты, созданные автором, высоко подняли уровень абстракции, наделив язык С++ чертами языка спецификации проектирования, сохранив всю его мощь и выразительность. В книге изложены способы реализации основных шаблонов проектирования. Разработанные компоненты воплощены в библиотеке Loki, которую можно загрузить с Web-страницы автора. Книга предназначена для опытных программистов на С++.
и вверх-вниз по списку), чтение документации к boost, поиск по форуму...
Здравствуйте, Кодт, Вы писали:
К>Здравствуйте, Механик, Вы писали:
К>>>Фабрики можно сделать и в виде объектов-функторов, и в виде классов, реализующих интерфейс (как, например, в COM)...
М>>Так а где бы можно было узнать про объекты-функторы...
К>Чтение хороших книг по С++ (начиная с АлександрескуАвтор(ы): Андрей Александреску
В книге изложена новая технология программирования, представляющая собой сплав обобщенного программирования, метапрограммирования шаблонов и объектно- ориентированного программирования на С++. Настраиваемые компоненты, созданные автором, высоко подняли уровень абстракции, наделив язык С++ чертами языка спецификации проектирования, сохранив всю его мощь и выразительность. В книге изложены способы реализации основных шаблонов проектирования. Разработанные компоненты воплощены в библиотеке Loki, которую можно загрузить с Web-страницы автора. Книга предназначена для опытных программистов на С++.
и вверх-вниз по списку), чтение документации к boost, поиск по форуму...
У кого есть книга Александреску
АлександрескуАвтор(ы): Андрей Александреску
В книге изложена новая технология программирования, представляющая собой сплав обобщенного программирования, метапрограммирования шаблонов и объектно- ориентированного программирования на С++. Настраиваемые компоненты, созданные автором, высоко подняли уровень абстракции, наделив язык С++ чертами языка спецификации проектирования, сохранив всю его мощь и выразительность. В книге изложены способы реализации основных шаблонов проектирования. Разработанные компоненты воплощены в библиотеке Loki, которую можно загрузить с Web-страницы автора. Книга предназначена для опытных программистов на С++.
в электронном виде?
... << RSDN@Home 1.1.4 beta 7 rev. 447>>