Tôi đang viết một chức năng sẽ nhận được một trong số (std::map
, std::multimap
, std::unordered_map
hoặc std::unordered_multimap
). Mã của tôi là như sau:Mẫu chức năng nhận bất kỳ bản đồ chuẩn nào
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;
}
}
Mẫu template tham số Map
không khái quát cho tất cả các loại bản đồ. Các số std::map
và std::multimap
nhận được bốn thông số mẫu và std::unordered_map
và std::unordered_multimap
nhận được năm thông số mẫu. Điều này ngụ ý rằng tôi không thể giải quyết vấn đề với tham số mẫu mẫu. Có cách nào để giải quyết vấn đề này với ràng buộc rằng tất cả các bản đồ phải có KeyType = ValeType = Coord
không? Tôi không muốn chỉ định rõ ràng các loại thông số trong cuộc gọi đến filter
.
Giả định bạn không muốn hỗ trợ bản đồ với hàm đặt hàng khác hoặc hàm băm khác với mặc định. Điều đó có vẻ kỳ lạ. – Yakk