【发布时间】:2016-12-04 23:55:45
【问题描述】:
假设我想绑定一个函数,然后将它作为 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.
我认为我的演员阵容有误,但我不知道声明类型的正确方法。这样做的正确方法是什么?
【问题讨论】: