【发布时间】:2017-08-09 21:48:29
【问题描述】:
在很多情况下,我们希望对完全相同的std::map 或std::unordered_map 执行一些操作,而与映射的类型无关。让我们考虑以下示例:
#include <map>
#include <unordered_map>
#include <iostream>
template< template <typename,typename> class Container >
void printMap(Container<int, long> inputMap, bool additionalParam = false)
{
for (const pair<int,long> p : inputMap)
cout<<p.first <<","<< p.second <<std::endl;
}
int main()
{
int a = 1;
long b = 2;
map<int,long> map1;
map1.emplace(a,b);
unordered_map<int,long> map2;
map2.emplace(a,b);
printMap(map1);
printMap(map2);
return EXIT_SUCCESS;
}
如果我尝试编译上面的示例,我有这个:
error: no matching function for call to ‘printMap(std::map<int, long int>&)’
我在post 中读到了关于模板模板的使用。这样做的正确方法是什么?
【问题讨论】:
-
一个
std::map有两个以上的模板参数。您还有一个类型Compare和一个类型Allocator。您必须指定所有,甚至是默认的。 -
请注意,您的代码将在 C++17 中正常工作;以下解决方案均适用于C++14及以下。
标签: c++ c++11 templates stdmap template-templates