Sto scrivendo una funzione che dovrebbe ricevere uno (std::map
, std::multimap
, std::unordered_map
o std::unordered_multimap
). Il mio codice è la seguente:Modello di funzione che riceve qualsiasi mappa standard
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;
}
}
Il modello parametro di template Map
non generalizzare per tutti i tipi di mappe. I modelli std::map
e std::multimap
ricevono quattro parametri modello e std::unordered_map
e std::unordered_multimap
ricevono cinque parametri modello. Ciò implica che non posso risolvere il problema con un parametro template template. C'è un modo per risolvere questo problema con il vincolo che tutte le mappe devono avere KeyType = ValeType = Coord
? Non vorrei specificare esplicitamente i tipi di parametri in una chiamata a filter
.
Questo presuppone che tu non voglio supportare mappe con una funzione di ordinamento diversa, o un diverso hash dall'impostazione predefinita. Che sembra strano – Yakk