Объединить много интерфейсов в один базовый...как?
От: kvser  
Дата: 26.10.07 05:32
Оценка:
Здравствуйте!

Ситуация: Есть много устройств, которые могут выполнять различные команды. Некоторые комманды у некоторых устройств одинаковые, а есть такие у которых все команды уникальны (т.е. нет аналогичных команд у других устройств).

Задача: надо это смоделировать. Хотел сделать так:
абстрактный базовый класс AbstractDevice, от которого наследуются остальные классы конкретных устройств. Но для того, чтобы запросить сформировать команду getCommandFoo у ConcretDevice1 необходимо, чтобы в AbstractDevice была виртуальная функция getCommandFoo. Таким образом получается, что в AbstractDevice должны быть для всех устройств все функции, которые формируют команды — это как-то неприемлемо.

Какой есть альтернативный вариант?

Может быть как-то так можно:
class AbstractDevice
{
public:
command getCommand(int t);
}
class ConcretDevice1 : public AbstractDevice
{
public:
namespace СommandTypes {enum Type{com1, com2}};
command getCommand(int t);
}

А клиент делает:
AbstractDevice *device = new 
device->getCommand(ConcreteDevice1::commandTypes::com2); //преобразование ConcreteDevice1::СommandTypes::Type в int;


Обращаться к конкретному классу устройства клиент будет через указатель на AbstractDevice.
Может есть какие-нибудь красивые решения?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.