c++ - 将重载函数(如 std::stoll)打包到 std::function

标签 c++ c++11 overloading std-function

我很难将 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/

相关文章:

c++ - EAI_NODATA 和 EAI_ADDRFAMILY 未声明(Linux 操作系统)

c++ - C++ 可执行文件中哪个部分存储全局 const 变量?

c++ - 检查 C++ 成员函数是否存在,可能 protected

c++ - 从计数和带拷贝的元素值初始化 std::vector?

javascript - 如何覆盖 JavaScript 数组排序方法?

java - 使用重载和覆盖的方法选择

c++ - 使用 setw 和 setfill 输出格式化

C++ Pig 拉丁代码,只删除文件信息

c++ - MSVC 11 支持 std::thread 吗?

c++ - 有趣的问题运算符重载