Я хотел бы знать, как написать функцию, которая может принимать в качестве параметра ассоциативный контейнер, который сам принимает два или более параметров шаблона. Например, если я хочу написать функцию, которая работает для std :: map, я мог бы написать что-то вроде того, что показано ниже.
template <class Map, class Key, class Value, class Compare, class Allocator>
void foo(Map<Key, Value, Compare, Allocator>& map);
Однако, это не будет работать для boost :: unordered_map, так как boost :: unordered_map принимает пять параметров шаблона. Я мог бы принять карту в качестве единственного параметра шаблона и использовать признаки, которые она должна поддерживать, чтобы позднее вывести тип ключа и значения, но для вложенных карт код становится очень многословным и сложным в обслуживании. Есть ли более простой способ написать такую функцию, но при этом она работает для любого ассоциативного контейнера, который принимает любое количество параметров шаблона больше или равно двум?
Обратите внимание, что принятия итераторов вместо контейнеров в качестве параметров будет недостаточно, потому что мне нужно больше информации о контейнере, с которым работает итератор, чем то, что может предоставить итератор.
Большое спасибо!