Я, конечно, не знаю, как озаглавить этот вопрос, извините.
У меня возникли некоторые проблемы при разработке следующей системы.
Мне нужен класс, который сделает некоторую работу, но эту работу можно выполнить несколькими разными способами, скажем, что эта работа будет выполняться через «драйверы».
Эти драйверы могут иметь разные интерфейсы, и поэтому мне нужно создать оболочку для каждогоdriver.
Итак, я получил (или мне нужно) это:
Me ---> MainClass ----> Wrapper ----> Drivers
MainClass - это класс, к которому я буду прикасаться, и будет вызывать методы драйверов через разные оболочки.Вот пример использования:
MainClass worker;
worker.set_driver("driver_0");
worker.start_process(); //Start process calls a wrapper method which calls a driver's method.
Для этого я создал класс интерфейса:
class Driver_Interface : public QObject
{
Q_OBJECT
public:
Driver_Interface(QObject* parent=0) : QObject(parent){}
virtual bool open()=0;
virtual bool close()=0;
virtual bool write()=0;
virtual bool set_config()=0;
};
Оболочка драйвера имеет такую форму:
class Driver0 : public Driver_Interface
{
Q_OBJECT
public:
Driver0( QObject* parent=0);
Driver0();
bool open();
bool close();
bool write();
bool set_config();
};
НаконецЗдесь возникает противоречивая точка, определяющая MainClass: я хотел бы избежать создания одного члена для каждой оболочки, поэтому я попробовал это, и сейчас компилятор не жалуется:
class MainClass
{
public:
MainClass();
~MainClass();
void init();
void set_driver( const QString& );
void start_process();
protected:
QString driver_str;
Driver_Interface* driver; //!<--- Here Here!!!
};
При установке драйверавыбрал, я делаю это:
if( driver_str.compare("driver_0")==0 )
this->driver = new Driver_0();
- Это допустимая конфигурация C ++ или у меня рано или поздно возникнут проблемы?В основном, меня беспокоит создание драйвера другого типа, отличного от Driver_Interface, я вижу, что он запускается автоматически, и никто не жалуется ...
- На самом деле у меня сейчас есть некоторые проблемы с компиляцией печально известных таблицне определено в Driver_0 ... это имеет какое-то отношение к тому, чего я хочу достичь? ОБНОВЛЕНО : я исправил это, удалив конструктор * Driver_Interface *.