接收任何标准地图的功能模板

Rau*_*nso 9 c++ templates c++11

我写这封信时,应该接收的一个(一个功能std::map,std::multimap,std::unordered_mapstd::unordered_multimap).我的代码如下:

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;
            }
        }
Run Code Online (Sandbox Code Playgroud)

模板模板参数Map不会针对所有类型的地图进行推广.在std::mapstd::multimap接收四个模板参数,并std::unordered_mapstd::unordered_multimap获得5个模板参数.这意味着我无法使用模板模板参数解决问题.有没有办法用所有地图必须具有的约束来解决这个问题KeyType = ValeType = Coord?我不想在调用中明确指定参数类型filter.

Tar*_*ama 1

尽管这些模板类采用不同数量的参数,但它们具有默认值,因此都可以仅用两个实例化。因此,您可以只使用可变参数模板,然后任何不能用两个参数实例化的东西都会导致编译器错误:

template<template <class...> class Map, typename Coord>
Run Code Online (Sandbox Code Playgroud)