首页 文章

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

提问于
浏览
2
#include <functional>
#include <string>

using namespace std;

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

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

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

1 回答

  • 7

    两个原因:

    • std::stol 的第二个参数类型为 std::size_t* ,而不是 std::size_t .

    • std::stol 重载也接受 const std::wstring& 作为其第一个参数 .

    你必须写:

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

相关问题