我想使用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
作为默认值?
答案 0 :(得分:12)
第一个版本出了什么问题?
stoi
和string
有两个wstring
重载。不幸的是,在获取指向函数的指针时,没有方便的方法来区分它们。
是不是可以使用std :: stoi作为默认值?
你可以转换为你想要的重载类型:
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);});