【发布时间】:2016-03-28 03:34:39
【问题描述】:
我想要一个std::unordered_map<std::string,MyClass*()> 变量。但是 - 当我尝试实例化它时,我收到一条错误消息,在内心深处,本质上是:
/usr/include/c++/4.9/bits/stl_pair.h(102): error: a function type is not allowed here
detected during:
instantiation of class "std::pair<_T1, _T2> [with _T1=const std::string, _T2=MyClass *()]"
我很确定这不是我的错误造成的。我浏览了该网站并注意到一个指向LWG issue 2051 的链接
使std::pair 过于严格。这真的是我所看到的吗?如果是这样,我应该怎么做才能解决它?使用包装类没有数据和operator() 可能吗? std::function?
【问题讨论】:
-
要清楚,您想从字符串映射到指向函数的指针,并返回指针到 MyClass 吗?如果是这样,则将第二个参数更改为
MyClass *(*)() -
我看不出问题 2051 有什么关系
-
我不认为函数容器是合法的 - [container.requirements.general] 说它包含存储 objects。所以要实现一个函数容器,你实际上必须有一个函数指针容器(或包装函数指针的类,如
std::function,或函子对象)。 -
@M.M:解决了这个问题。现在我会去看看这个问题是否真的存在于我的代码中。
-
您的错误消息与您的代码不对应...
_T2在更新的代码中不会是MyClass *()。如果您仍然遇到问题,请发布 MCVE。 Working example
标签: c++ c++-standard-library std-pair keyvaluepair