Есть паттерн фабричный метод =) У меня в нем названия классов передаются через параметр, т.е.
Product *Creator::Create(QString name, QString text)
{
if(name== "name1") return new name1(text);
if(name== "name2") return new name2(text);
if(name== "name3") return new name3(text);
//...
if(name== "nameN") return new nameN(text);
return new Unknown(text);
}
И таких классов штук 15, но общий код в них одинаковый, по сути только имя класса различно; там еще у каждого класса свой номерок есть, поэтому и надо каждый раз создавать новый класс.
Вот и хотел классы name1, name2 как-то объединить по коду
Это можно сделать через специализацию шаблонного класса. Например:
C++ (Qt)
enum NameOfClasses {NoName, Name1, Name2, Name3, ... NameN};
template <int>
class Object {};
// Специализации:
template<>
class Object<Name1>
{
public:
void someMethod() { // Реализация #1 }
};
template<>
class Object<Name2>
{
public:
void someMethod() { // Реализация #2 }
};
template<>
class Object<NameN>
{
public:
void someMethod() { // Реализация #N }
};
Product *Creator::Create(NameOfClasses name, QString text)
{
if(name== Name1) return new Object<Name1>(text);
if(name== Name2) return new Object<Name2>(text);
if(name== Name3) return new Object<Name3>(text);
//...
if(name== NameN) return new Object<NameN>(text);
return new Object<NoName>(text);
}