我想使用 std::function
作为方法的参数,并将其默认值设置为 std::stoi
。
我尝试了以下代码:
void test(std::function<int(const std::string& str, size_t *pos , int base)> inFunc=std::stoi)
不幸的是,我收到以下错误:
no viable conversion from '<overloaded function type>' to 'std::function<int (const std::string &, size_t *, int)>'
我设法通过添加创建专用方法进行编译。
#include <functional>
#include <string>
int my_stoi(const std::string& s)
{
return std::stoi(s);
}
void test(std::function<int(const std::string&)> inFunc=my_stoi);
第一个版本有什么问题?
难道不能使用 std::stoi
作为默认值吗?
最佳答案
What's wrong in the first version?
stoi
有两个重载,用于string
和wstring
。不幸的是,在获取指向函数的指针时,没有方便的方法来区分它们。
Isn't it possible to use std::stoi as default value?
您可以转换为您想要的重载类型:
void test(std::function<int(const std::string&)> inFunc =
static_cast<int(*)(const std::string&,size_t*,int)>(std::stoi));
或者您可以将其包装在 lambda 中,这与您所做的类似但不会引入不需要的函数名称:
void test(std::function<int(const std::string&)> inFunc =
[](const std::string& s){return std::stoi(s);});
关于c++ - 如何使用 std::stoi 作为默认值创建 std::function 作为方法参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20635630/