如何在C ++中使用模板制作通用地图

时间:2013-05-16 05:32:30

标签: c++ visual-studio-2010 templates arguments

我正在尝试创建一个通用的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;
}

这里出了什么问题?

1 个答案:

答案 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");

但是你必须仔细考虑如何使用这种结构。