【问题标题】:Am I hitting the stl::pair issue 2051 if I use a function pointer as the value a pair?如果我使用函数指针作为一对值,我是否会遇到 stl::pair 问题 2051?
【发布时间】: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


【解决方案1】:

如果你想要一个从字符串到MyClass指针的映射,你必须声明:

 std::unordered_map<std::string,MyClass*> x;

但是,如果您希望将 函数指针 映射到返回指向 MyClass 的指针的函数,您可以考虑:

std::unordered_map<std::string,MyClass*(*)()> x;

【讨论】:

  • 将检查这是否是问题所在,或者我是否只是错误地引用了定义(我已经删除了一些涉及的 ​​using = )。
猜你喜欢
  • 2013-09-28
  • 1970-01-01
  • 1970-01-01
  • 2016-02-06
  • 2019-10-21
  • 2021-11-29
  • 1970-01-01
  • 2011-12-23
  • 1970-01-01
相关资源
最近更新 更多