如何创建一个 std::function 作为方法参数,并将 std::stoi 作为默认值
How to create an std::function as method argument with std::stoi as default value?
我想使用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
作为默认值?
第一个版本有什么问题?
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);});
相关文章:
- 带有指定长度字符* 参数的 std::regex_search 在 VS2017 中不起作用?
- 为什么 std::function 可以作为 std::not2 的参数?
- 传递给std::function template的template参数究竟代表什么
- 转换函数,将 std::数组的双精度作为参数或双精度作为参数单独转换
- 在C++中,使用带有 std::optional 参数的函数<T>来表示可选参数是否有意义?
- 将函数参数"const char*"转换为"std::string_view"是
- 当指向对象的指针作为参数传递给 std::thread 时,内存可见性
- 为什么 std::绑定错误参数可以成功?
- 使用模板化的键类型定义 std::map,该键类型基于作为参数接收的函数
- std::vector 没有重载函数的实例与参数列表匹配
- std::span<const T> 作为函数模板中的参数
- SegFault 同时使用 std::string::operator+= 和函数作为参数
- 如果模板没有可变参数,则 Lambda 被推导出为 std::function
- 将参数打包的参数传递到 std::queue 中,以便稍后使用不同的函数调用
- 在构造函数中使用可变参数初始化 std::tuple
- 为什么我不能将引用作为 std::async 的函数参数传递
- 转发变量参数列表以模拟 std::thread
- 使用 std::enable_if 限制派生类的模板参数时出现编译错误
- "std::shared_ptr":不是参数"_Ty"的有效模板类型参数
- 可变参数模板参数扩展 类型为 std::function 的类成员