我是函数库的新手。我想将静态类方法与类的对象绑定(bind),并返回指向该函数的 void 指针。我尝试使用 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 的返回类型为 void 指针,因为这是我正在使用的外部库之一的输入。如有任何帮助/建议,我们将不胜感激。
最佳答案
不幸的是,您无法将 std::bind
的结果转换为函数指针,原因很简单。让我们尝试想象一下 std::bind 是如何工作的。您有一个带有一些参数和值的函数,并且您想要获得可以在没有参数的情况下调用的可调用内容。在运行时不生成新代码的唯一可能的方法是创建一个函数对象,该对象存储原始函数和带有重载 operator()
的绑定(bind)参数。实际上 std::_Bind_helper
与此描述非常相似。
因此,您会得到一个具有某些成员的某种类型的对象。因此它不能以某种方式转换为指向不能存储任何参数的函数的指针。
关于c++ - 无法将 std::bind 的返回值转换为 void 函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57400372/