Моя причина задать вопрос:
Я использую большой фреймворк не моего собственного дизайна. Мне нужно использовать несколько классов «пользовательской информации», которые не связаны с кодом. Они не являются производными от какого-либо общего базового класса, и у меня нет доступа к исходному коду для перекомпиляции.
Эти информационные классы работают следующим образом: есть классы A, B, C и т. Д. Каждый из этих классов имеет связанный с ними информационный класс Ainfo, Binfo и т. Д. Поскольку пользователь (то есть я) должен прикрепить различную информацию к данному объекту данного класса (имеется в виду, что у меня могут быть два разных класса, производных от Ainfo, которые я хочу присоединить к объекту A), и существует только один информационный слот Я хочу сделать информационный объект, который может устаревать другие различные информационные объекты. Таким образом, я могу просто добавить свою информацию в эти поддельные информационные объекты, которые являются контейнером для других информационных объектов.
Проблема возникает в том, что я хотел бы сделать это для Ainfo, Binfo, Cinfo, Dinfo и т. Д. Поэтому я хотел бы написать миксин или что-то, что просто добавляет функциональность контейнера к любому из простых старых информационных классов.
Проблема в том, что для информационных классов Ainfo, Binfo и т. Д. Требуются разные аргументы конструктора.
Итак, вопрос:
Можно ли передать вектор типов в конструктор mixin? Таким образом, я мог бы получить список переменных соответствующих параметров конструктора? Можете ли вы назначить тип переменной вне аргумента шаблона? Можете ли вы использовать эту переменную?
или
Можно ли наследовать от конкретного объекта? Могу ли я, например, создать новый объект Ainfo с использованием правильного конструктора, а затем выполнить миксин для этого конкретного объекта. Это было бы похоже на использование шаблона декоратора, за исключением того, что у меня нет общего интерфейса. (декорируемый объект - это интерфейс)
или
Мне просто нужно прикусить пулю и написать 15 000 (преувеличение :)) классов, которые абсолютно одинаковы, но наследуются от другого базового класса и содержат объект другого типа?
Резюме:
Мне нужно добавить функцию контейнера для нескольких различных классов, сохраняя интерфейс каждого класса и используя их конструкторы, принимающие аргументы. Я не хотел бы дублировать код.
Заранее спасибо. Извините за полную резню терминологии.