Как и стандартные контейнеры, контейнеры Fusion не предоставляют виртуального деструктора, поэтому те же аргументы против их расширения сохраняются.
Кроме того, по моему опыту, метапрограммирование шаблонов и наследование не сочетаются друг с другом. Основная проблема заключается в том, что базовые классы не считаются для выбора специализаций шаблонов, что означает, что если некоторые метафункции специализированы для fusion::vector
, вы не сможете использовать его с типом, производным от fusion::vector
.
Если я правильно помню, Fusion использует диспетчеризацию тегов вместе с классами черт для выбора реализаций, так что это может быть проблемой. Я думаю, что класс свойств по умолчанию просто «пересылает» вложенную typedef, так что это может сработать, поскольку typedef будет наследоваться, но я не уверен, что это надежно (реализация может измениться).
Наконец, контейнеры Fusion не предоставляют никаких функций-членов (кроме тех, которые необходимы для построения и назначения), поэтому из них мало пользы. Если вы хотите, чтобы ваш класс был совместим с функциями Fusion (meta), вы должны использовать механизм расширения , предоставляемый библиотекой.