Здравствуйте, Niggar, Вы писали:
N>Есть ли у кого какие-нибудь идеи по оптимизации реализации фабрики классов.
N>К примеру:
N>class r{};
N>class r1: public r {...}; N>class r2: public r {...}; N>class r3: public r {...};
N>r* getObject( int rid ) N>{ N> switch(rid) N> { N> case 1: return new r1(); N> case 2: return new r2(); N> case 3: return new r3(); N> } N>}
N>Как можно реализовать фабрику без использования switch... так чтобы в дальнейшем можно было бы более элегентно добавлять создание новых классов?
Ну например можно сделать так. Заводим std::map у которого ключ — это айдитшник класса, а значение например прототип — объект класса, имеющий метод Close(). Поиск по мапу, если я не ошибаюсь, будет работать быстрее свича. Кроме того, можно динмамически изменять список классов, объекты которых может создавать фабрика.
Если не хочется (или нельзя) держать прототипы, то можно в мапе хранить указатели на функции, создающие объекты.