0

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

这里出了什么问题?

4

1 回答 1

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

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

于 2013-05-16T05:42:08.727 回答