Зарегистрируйте экземпляр плагина с помощью класса Framework на созданииC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Зарегистрируйте экземпляр плагина с помощью класса Framework на создании

Сообщение Anonymous »

В проекте C ++ я хочу добавить плагины для определенной функциональности и зарегистрировать их в существующем классе Framework. Класс плагина также имеет член Framework & M_Framework , который будет инициализирован в конструкторе, который указывает на экземпляр класса Framework. Конструкторы для подклассов могут или не могут требовать дополнительных аргументов, но все они должны инициализировать M_FRAMEWORD .
Экземпляры плагина могут потребоваться, чтобы их состояние синхронизировалось с внешними компонентами за пределами контроля над проектом (например, облачный API), поэтому копирование не является повышенным, что он будет нарушать отношения 1: 1: 1: 1: 1: 1: 1: 1: 1: 1: 1: 1: 1: 1: 1: 1: 1: 1: 1: 1: 1: 1: 1: 1: 1: 1: 1: 1: 1: 1: 1: 1: 1: 1: 1: 1: 1: 1: 1: 1: 1: 1: 1: 1: 1: 1: 1: 1: 1: 1: 1: 1: 1: 1: 1: 1: 1: 1: где одна копия изменяет внешнее состояние, но другая копия все еще имеет старое состояние). Движение экземпляров не будет проблемой.
Для фреймворка я планирую реализовать метод RegisterPlugin () , который добавляет экземпляр плагина к члену типа std :: set или аналогичный (любой линейный тип, который может удерживать экземпляры плагина или его подкласс). Структура на творении. Что -то вроде: < /p>

Код: Выделить всё

Plugin::Plugin(Framework & framework)
: m_framework(framework)
{
framework.RegisterPlugin(*this);
}
Теперь я сталкиваюсь со всеми видами вопросов, таких как std :: set , требующий операторы для типа, наборы не принимают абстрактные классы и создают создание копий при вставке.
Как я могу достичь того, что я хочу? Держать его подкласс), без естественного порядка сортировки? Alternatives:
  • A vector/list/whatever instead of set would also do – it is unlikely that anyone would ever attempt to insert duplicates, I just need the size to be flexible
  • Wrapping the Plugin class into another standard type (which?)
[*]How do I ensure Ссылка на экземпляр плагина, а не на копию, вставлена ​​в набор? (Класс плагинов удаляет свой конструктор копирования.) < /Li>
Какое из доступных решений будет работать в конструкторе экземпляра, который будет вставлен? (Альтернатива будет фабричным методом для каждого подкласса.)


Подробнее здесь: https://stackoverflow.com/questions/796 ... n-creation
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»