Piszę funkcję, która powinna otrzymać jedną z (std::map
, std::multimap
, std::unordered_map
lub std::unordered_multimap
). Mój kod jest następująca:Szablon funkcji odbierający dowolną standardową mapę
template<template <class, class> class Map, typename Coord>
inline typename std::enable_if<std::is_arithmetic<Coord>::value>::type
filter(Map<Coord, Coord>& map, Coord step = 2) {
for (auto it = std::begin(map); it != std::end(map);) {
if (it->second - it->first <= step){
it = map.erase(it);
}
else
++it;
}
}
Szablon szablon parametr Map
nie uogólniać na wszystkich typach map. Modele std::map
i std::multimap
odbierają cztery parametry szablonu, a std::unordered_map
i std::unordered_multimap
odbierają pięć parametrów szablonu. Oznacza to, że nie mogę rozwiązać problemu za pomocą parametru szablonu szablonu. Czy istnieje sposób rozwiązania tego problemu z ograniczeniem, że wszystkie mapy muszą mieć KeyType = ValeType = Coord
? Nie chciałbym wyraźnie określać typów parametrów w wywołaniu filter
.
To zakłada, że nie chcesz obsługiwać map z inną funkcją porządkowania lub inną wartością domyślną. Co wydaje się dziwne. – Yakk