gpt4 book ai didi

c++ - 无法将 std::bind 的返回值转换为 void 函数指针

转载 作者:搜寻专家 更新时间:2023-10-31 01:24:59 26 4
gpt4 key购买 nike

我是函数库的新手。我想用类的对象绑定(bind)一个静态类方法,并返回一个指向该函数的空指针。我尝试使用 std::bind 但它无法将类成员函数转换为指向该函数的自由 float 指针

这是我的测试代码:

class base{
void (*fn)();
int m_var;
public:
base(int var): fn(std::bind(print, this)), m_var(var){
std::cout << "base ctor\n";
fn(); //something like this. fn should be a void pointer to the function.
}

static void print(base *b){
std::cout << b->m_var << "\n";
}
};

int main(){
base *b = new base(5);
return 0;
}

这是我得到的错误:

error: cannot convert ‘std::_Bind_helper<false, void (&)(base*), base*>::type’ {aka ‘std::_Bind<void (*(base*))(base*)>’} to ‘void (*)()’ in initialization

我知道我无法将类成员转换为自由 float 函数,但我需要 std::bind 的返回类型为空指针,因为它是我正在使用的外部库之一的输入。感谢您提供任何帮助/建议。

最佳答案

不幸的是,您不能将 std::bind 的结果转换为函数指针,原因很简单。让我们试着想象一下 std::bind 是如何工作的。您有一个带有一些参数和一个值的函数,并且您想要获得可以在没有参数的情况下调用的可调用对象。在不在运行时生成新代码的情况下,唯一可能的方法是创建一个函数对象,它存储原始函数和带有重载的 operator() 的绑定(bind)参数。实际上 std::_Bind_helper 和这个描述很相似。

因此,您会得到一个具有某些成员的某种类型的对象。所以它不能以某种方式转换为指向不能存储任何参数的函数的指针。

关于c++ - 无法将 std::bind 的返回值转换为 void 函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57400372/

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