我想编写一个函数模板来处理向量,列表,集合...... 并且想要编写专门化函数来分别处理地图, 当我编写以下代码并且编译器报告错误时。
任何人都可以帮我修改它吗?
#include <iostream>
#include <string>
#include <map>
#include <unordered_map>
using namespace std;
// test() for the vectors, lists, sets, ...
template <template <typename...> class T>
void test()
{
T<string, int> x;
//...
}
// specialize test() for map
template <>
void test <map<> class T>()
{
T<string, int> x;
//...
}
int main()
{
test<map>();
test<unordered_map>();
}
答案 0 :(得分:2)
模板专业化应该是:
template <>
void test <std::map>()
{
std::map<string, int> x;
}
我将模板参数从map<> class T
(无效语法)更改为std::map
。我将T<string, int>
更改为std::map<string, int>
,因为专业化中不存在名称T
。
答案 1 :(得分:0)
以下是完整的代码:
#include <iostream>
#include <string>
#include <map>
#include <unordered_map>
using namespace std;
template <template <typename...> class T, typename TN>
void test()
{
cout << "---------- test case 1" << endl;
T<TN, int> x;
}
template <template <typename...> class T>
void test()
{
cout << "---------- test case 2" << endl;
T<string, int> x;
}
template <>
void test < map,string >()
{
cout << "---------- test case 3" << endl;
map<string, int> x;
}
template <>
void test < map >()
{
cout << "---------- test case 4" << endl;
map<string, int> x;
}
int main()
{
test<unordered_map,string>(); // trigging test case 1
test<unordered_map>(); // trigging test case 2
test<map,string>(); // trigging test case 3
test<map>(); // trigging test case 4
}