我尝试了以下代码:
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?
对于字符串和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);});总结
以上是内存溢出为你收集整理的c – 如何使用std :: stoi创建std :: function作为方法参数作为默认值?全部内容,希望文章能够帮你解决c – 如何使用std :: stoi创建std :: function作为方法参数作为默认值?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)