gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:02:26 27 4
gpt4 key购买 nike

#include <functional>
#include <string>

using namespace std;

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

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

error : no matching constructor for initialization of 'std::function<long (const std::string &, std::size_t, int)>' (aka 'function<long (const basic_string<char, char_traits<char>, allocator<char> > &, unsigned long long, int)>')

最佳答案

两个原因:

  1. std::stol 的第二个参数的类型为 std::size_t*,而不是 std::size_t
  2. std::stol 被重载以接受 const std::wstring& 作为它的第一个参数。

你必须写:

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

附录(2019 年 7 月):在 C++20 中,上述解决方案变得无效(见评论)。您必须改用 lambda。

关于c++ - 为什么不能将 std::stol 转换为 std::function 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41012118/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com