我正在尝试创建一个通用的map
,它将any datatype
作为其第二个元素。
但是当我尝试创建一个对象时,我收到的错误为argument list for class template is missing
template<typename T1>
class MAP{
public:
std::map<string, T1>Hello;
//MAP(){Hello["Hello"] = 3;}
};
int main()
{
MAP map1;//Error happens here
return 0;
}
这里出了什么问题?
答案 0 :(得分:4)
根据您的代码示例,而不是问题的描述,看起来您尝试实现的内容可以用别名模板表示:
template <typename V>
using MAP = std::map<std::string, V>;
这需要C ++ 11支持。但是MAP
的实例只能有一个映射类型V
,就像在代码示例中一样。
MAP<int> mi; // std::map<std::string, int>
MAP<double> md; // std::map<std::string, double>
如果要将任何类型存储为映射类型,可以考虑使用Boost.Any
的地图using ANYMAP = std::map<std::string, boost::any>;
ANYMAP m;
m["Hello"] = 42;
m["Bye"] = std::string("message");
但是你必须仔细考虑如何使用这种结构。