我想使用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);
解决方法
What’s wrong in the first version?
对于字符串和wstring,有两个stoi重载.不幸的是,在获取指向函数的指针时,没有方便的方法来区分它们.
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);});
原文地址:https://www.jb51.cc/c/114935.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。