Если я понял, что вы имеете в виду, это просто.
Просто включите объявление шаблона класса в:
template<typename handlerType, template< typename T> class... mapTypes>
class event_class_mgr {
// ...
}
Затем обновите функцию-член add_class
:
void add_class( )
{
using accumulator_type = int[];
accumulator_type accumulator = { (my_classes_[ mapTypes<handlerType>::id ] = new typename mapTypes<handlerType>::type(handler_), 0)... };
(void)accumulator;
}
Использование C ++ 17 и, следовательно, выражений свёртывания уменьшило бы шаблон, но вы явно пометили вопрос как C ++ 11, так что ...
Просмотрите его и запустите на wandbox .
В качестве примечания, в C ++ 17 вы можете написать add_class
как:
void add_class( )
{
((my_classes_[ mapTypes<handlerType>::id ] = new typename mapTypes<handlerType>::type(handler_)), ...);
}