2015-01-27 7 views
0

У меня есть std::forward_list и у меня есть класс Delegate (взято из here), который имеет класс с сигнатурой переменного типа (typename return_type, typename... Args).Выполнение forward_list из класса вариационных шаблонов

Я хочу сделать std::forward_list из этих Delegate s. Как я могу это сделать? Я пробовал:

std::forward_list<Delegate<void, typename...> > но он дает синтаксическую ошибку. Я также хотел бы добавить к этому списку позже. Я могу гарантировать, что каждый из этих списков (будет несколько) будет иметь только Delegate типов, которые принимают одинаковое количество параметров, хранящихся вместе. Тем не менее, каждый список может иметь список методов, которые принимают разные параметры, чем методы в других списках.

Эти списки на самом деле будут находиться внутри std::unordered_map.

+0

начинающий думать, что это невозможно из-за того, как C++ компилирует вариативные шаблоны –

+1

Не могли бы вы показать минимальный пример кода, который не удается скомпилировать? (И ошибка компиляции.) – Brian

ответ

1

Во-первых, похоже, что вы должны использовать unordered_multimap вместо карты со списками в качестве значений.

Если вы пытаетесь сохранить типы в контейнере STL, которые отличаются даже немного, вам необходимо создать базовый класс и сохранить их в качестве указателей на этот базовый класс. Вы упомянули, что все значения в одном списке будут иметь одинаковое количество параметров, но вы не указали, что параметры будут полностью идентичными.

+0

В чем разница между 'unordered_map' и' unordered_multimap' –

+0

У 'unordered_map' есть уникальные ключи – sbooth

+0

@KhanPower: по существу мультимайл может хранить любое количество значений для одного ключа, и он действует больше или менее подобные значения хранятся в списке. Это очень похоже на то, что вы описываете, просто проще. –

Смежные вопросы