让我们说我想绑定一个函数,然后将它作为void *传递给另一个函数,并将其转换回来。
我有一个全局函数,我尝试转换函数:
void function_wrapper(void * func){
std::function<void(const std::vector<double>&, const std::vector<double>&)> * function = reinterpret_cast<std::function<void(const std::vector<double>&, const std::vector<double>&)> *>(func);
std::function<void(const std::vector<double>&, const std::vector<double>&)> function_ = *function;
}
同时,func创建为:
auto func = std::bind(&MyObj<dim>::myfunc, this, _1, _2);
此处dim
是一个等于2
的模板化整数,function_wrapper
通过
function_wrapper((void *)(&func));
与此同时,myfunc
是MyObj<dim>
的方法,其类型为:
void myfunc(const std::vector<double>& x, std::vector<double>& F) const;
当我尝试按上述方法调用function_wrapper时,我在取消引用它时会出现以下错误:
Exception thrown: read access violation.
std::_Func_class<void,std::vector<double,std::allocator<double> > const & __ptr64,std::vector<double,std::allocator<double> > const & __ptr64>::_Getimpl(...) returned 0xFFFFFFFFFFFFFFFF.
If there is a handler for this exception, the program may be safely continued.
我认为我的演员输入错误,但我不知道声明类型的正确方法。这样做的正确方法是什么?