Хочу реализовать что-то вроде механизма плагинов, пока не динамически
подключаемых. Каждый плагин представляет собой класс имеющий метод
run() внутри которого и будет выполняться полезная работа. Проблема в
том что при запуске надо инициализировать GUI, т.е сообщить ему(ей)
какие плагины в данный момент существуют, при этом сами объекты
классов, реализующих плагины, еще не созданы.
Для этого придумал такую конструкцию :
class AbstractPlugin
{
public:
virtual void run()=0;
virtual string initGUI()=0;
};
class PluginCtor
{
public:
virtual AbstractPlugin * create()=0;
virtual void registerPlugin()=0;
};
class PluginManager
{
friend class PluginCtor;
public:
static vector<PluginCtor *> * theCtors;
};
#define CREATECTOR(name) \
class Ctor##name : public PluginCtor { \
public: \
AbstractPlugin * create() { return new (##name)();} \
void registerPlugin() {PluginManager::theCtors->push_back(this);} \
Ctor##name() {registerPlugin();} \
}; \
static Ctor##name Ctor##name##_var;
class RealPlugin : public AbstractPlugin
{
public:
void run();
string initGUI();
};
Здесь все классы-плагины должны быть потомками AbstractPlugin, и в
файле с реализацией (*.cpp) вызывать макрос CREATECTOR() со своим
именем в качестве параметра. А дальше в main() я пробегаю по массиву
theCtors, создаю объект через create(), вызываю initGUI() и сразу же
уничтожаю.
А вопрос такой : как все это можно реализовать средствами С++ проще, по возможности без использования статических переменных(static Ctor##name Ctor##name##_var;), а лучше вообще без макросов. Может кто-нибудь уже делал что-то подобное?
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от anonymous
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум ActiveQT: объект в event'е (2017)
- Форум доступ к шаблонным объектам фабрики??? (2006)
- Форум Spring: как конвертировать JSON-объект с id внешнего ключа вместо объекта (2014)
- Форум интерфейс + абстрактный класс (2020)
- Форум Вызвать метод базового класса при разрушении дочернего объекта (2015)
- Форум Доступ к Context в State pattern (2014)
- Форум qt виджет в динамической библиотеке (2010)
- Форум java 1000 тредов. Съедает память (2020)
- Форум Вопрос по архитектуре приложения (2019)
- Форум Вызов Python функций из C++. boost::python, Pyhton C-API. (2017)