C ++ Альтернатива шаблонному классу в интерфейсе плагина Qt - PullRequest
1 голос
/ 03 марта 2011

У меня проблемы с компиляцией плагина qt с универсальной функцией-членом и переменной. Идея такова: у меня есть плагин A1, который использует другие плагины неопределенного типа T (другие интерфейсы). A1 реализует интерфейс (абстрактный класс) A. В A мне нужна функция, которая передает другие плагины.

Это выглядит так:

template <typename T>
class A {
public:
  void setPlugins(QList<T*>* plugins)
  {
    plugins_ = plugins;
  }
private:
  QList<T*>* plugins_;
};

Надеюсь, я правильно понял шаблоны, но думаю, что это должно нормально работать. Теперь проблема в том, что кажется невозможным определить интерфейс плагина (A) как класс шаблона с концепцией плагина Qt. Есть ли другой способ сделать то, что я хочу?


EDIT: Я предпочитаю решение без RTTI.

Ответы [ 2 ]

1 голос
/ 03 марта 2011

Я постараюсь ответить ...

В Qt каждый класс подключаемого модуля должен быть унаследован от QObject.
Таким образом, вы можете удалить шаблоны и использовать список указателей на объекты QObject для хранения плагинов:

QList<QObject*> plugins_;  

Тем не менее, в этом случае вы потеряете информацию о типе, и вам нужно будет каким-то образом определить тип подключаемого модуля из указателя QObject позже, когда вам потребуется использовать конкретный подключаемый модуль из списка в качестве подключаемого модуля.
QObject является полиморфным типом, поэтому вы можете использовать dynamic_cast для определения типа точного плагина, когда вам это нужно. Надеюсь, это поможет.

0 голосов
/ 03 марта 2011

Одна проблема в том, что A - это не класс, а шаблон для класса.Возможно, вам придется использовать конкретный A для вашего интерфейса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...