gpt4 book ai didi

c++ - 将 std::bind 与重载函数一起使用

转载 作者:可可西里 更新时间:2023-11-01 18:20:05 28 4
gpt4 key购买 nike

我无法找到如何使用 std::bind 将参数绑定(bind)到重载函数。 std::bind 无法推断出重载类型(对于其模板参数)。如果我不重载函数,一切正常。代码如下:

#include <iostream>
#include <functional>
#include <cmath>

using namespace std;
using namespace std::placeholders;

double f(double x)
{
return x;
}

// std::bind works if this overloaded is commented out
float f(float x)
{
return x;
}

// want to bind to `f(2)`, for the double(double) version

int main()
{

// none of the lines below compile:

// auto f_binder = std::bind(f, static_cast<double>(2));

// auto f_binder = bind((std::function<double(double)>)f, \
// static_cast<double>(2));

// auto f_binder = bind<std::function<double(double)>>(f, \
// static_cast<double>(2));

// auto f_binder = bind<std::function<double(double)>>\
// ((std::function<double(double)>)f,\
// static_cast<double>(2));

// cout << f_binder() << endl; // should output 2
}

我的理解是 std::bind 无法以某种方式推断出它的模板参数,因为 f 已重载,但我不知道如何指定它们。我在代码中尝试了 4 种可能的方法(注释行),但均无效。如何为 std::bind 指定函数类型?任何帮助深表感谢!

最佳答案

您可以使用:

auto f_binder = std::bind(static_cast<double(&)(double)>(f), 2.);

auto f_binder = bind<double(double)>(f, 2.);

或者,可以使用 lambda:

auto f_binder = []() {
return f(2.); // overload `double f(double)` is chosen as 2. is a double.

};

关于c++ - 将 std::bind 与重载函数一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24874478/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com