为什么不能将std :: stol转换为std :: function对象?

时间:2016-12-07 07:57:46

标签: c++ function c++11 constructor type-conversion

#include <functional>
#include <string>

using namespace std;

int main()
{
    function<long(const string&, size_t, int)> fn = stol;
}

上述代码无法按预期编译,并出现以下错误:

  

错误:没有用于初始化'std :: function&lt; long(const std :: string&amp;,std :: size_t,int)&gt;'的匹配构造函数(又名'function&lt; long(const basic_string&lt; char,char_traits&lt; char&gt;,allocator&lt; char&gt;&gt;&amp;,unsigned long long,int)&gt;')

1 个答案:

答案 0 :(得分:8)

有两个原因:

  1. std::stol的第二个参数的类型为std::size_t*,而不是std::size_t
  2. std::stol已重载,也接受const std::wstring&作为其第一个参数。
  3. 你必须写:

    function<long(const string&, size_t*, int)> fn =
      static_cast<long(*)(const string&, size_t*, int)>(stol);