如何创建一个 std::function 作为方法参数,并将 std::stoi 作为默认值

How to create an std::function as method argument with std::stoi as default value?

本文关键字:std 参数 方法 并将 默认值 stoi 何创建 创建 一个 function      更新时间:2023-10-16

我想使用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有两个重载,分别用于stringwstring。不幸的是,在获取指向函数的指针时,没有方便的方法可以区分它们。

是否可以使用 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);});