Rau*_*nso 9 c++ templates c++11
我写这封信时,应该接收的一个(一个功能std::map
,std::multimap
,std::unordered_map
或std::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::map
和std::multimap
接收四个模板参数,并std::unordered_map
和std::unordered_multimap
获得5个模板参数.这意味着我无法使用模板模板参数解决问题.有没有办法用所有地图必须具有的约束来解决这个问题KeyType = ValeType = Coord
?我不想在调用中明确指定参数类型filter
.
尽管这些模板类采用不同数量的参数,但它们具有默认值,因此都可以仅用两个实例化。因此,您可以只使用可变参数模板,然后任何不能用两个参数实例化的东西都会导致编译器错误:
template<template <class...> class Map, typename Coord>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
400 次 |
最近记录: |