如何在c++中使用模板制作泛型映射

How to make a generic map using template in C++

本文关键字:泛型 映射 c++      更新时间:2023-10-16

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

这里出了什么问题?

根据您的代码示例,而不是根据问题的描述,看起来您试图实现的内容可以用别名模板表示:

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的映射。任何

using ANYMAP = std::map<std::string, boost::any>;
ANYMAP m;
m["Hello"] = 42;
m["Bye"] = std::string("message");

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