Russian Qt Forum
Ноябрь 05, 2024, 22:11 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 2 [3]   Вниз
  Печать  
Автор Тема: имя класса и шаблон  (Прочитано 9211 раз)
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #30 : Март 17, 2012, 00:29 »

Есть паттерн фабричный метод =) У меня в нем названия классов передаются через параметр, т.е.
Код:
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);
}
 
 
« Последнее редактирование: Март 17, 2012, 01:12 от m_ax » Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Страниц: 1 2 [3]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.223 секунд. Запросов: 23.