我很难将 std::stoll
打包到 std::function
中。天真
std::function<std::int64_t(std::string const&)> obj = std::stoll;
失败,因为 std::stoll
是两个函数的重载(cppreference 没有提及[在询问时]),一个采用 std::string
另一个 std::wstring
作为第一个参数。那么我如何得到我想要的东西呢?
我知道我可以改用调用 std::stoll
的 lambda,但我正在寻找以下形式的解决方案
auto parser = ???
std::function<std::int64_t(std::string const&)> obj{parser};
最佳答案
您可以转换重载函数指针来消除歧义:
function<int64_t(string const&)> obj =
static_cast<int64_t(*)(string const&)>(stoll);
编辑:您还需要绑定(bind)默认参数,因为 stoll
是一个三参数函数,而您正试图让它只接受一个参数:
function<int64_t(string const&)> obj =
std::bind(static_cast<int64_t(*)(string const&, size_t*, int)>(stoll),
placeholders::_1, nullptr, 10);
关于c++ - 将重载函数(如 std::stoll)打包到 std::function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23366879/