- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我很难将 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/
我正在使用 Visual Studio 2013,我正在尝试使用 stoll 将以十六进制格式表示负值的字符串 writen 转换为 long long,但我遇到了超出范围的异常。你知道为什么吗? 例
我在程序顶部的声明中有#include(string),但是当我尝试运行 stoi(string) 或 stoll(string) 时,出现以下错误。我正在运行 Cygwin g++ v4.5.3。
我很难将 std::stoll 打包到 std::function 中。天真 std::function obj = std::stoll; 失败,因为 std::stoll 是两个函数的重载(cpp
对于 stoll() 是否有替代方案,内置于 Windows 或兼容 Apache 许可证?对于 Visual Studio 2008。即使安装 windows 7 平台 SDK 也不会将 stoll
我是一名优秀的程序员,十分优秀!