Хочу реализовать что-то вроде механизма плагинов, пока не динамически
подключаемых. Каждый плагин представляет собой класс имеющий метод
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
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Java + теоретический вопрос (2005)
- Форум ActiveQT: объект в event'е (2017)
- Форум Почему такое использование выдает null pointer exception? (2020)
- Форум Добавить сахара в Java вдохновляясь Lombok (2016)
- Форум [Hibernate] Помогите побороть исключение «No persister for» (2011)
- Форум Доступ к Context в State pattern (2014)
- Форум Реализация полиморфизма (2006)
- Форум [Java] Пару идеологических вопросов. (2009)
- Форум доступ к шаблонным объектам фабрики??? (2006)
- Форум Вызвать метод базового класса при разрушении дочернего объекта (2015)