假設我想綁定一個函數,然後將其作爲void *傳遞給另一個函數,並將其轉回。將std :: bind函數指針轉換爲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.
我相信我有我的演員的打字錯誤,但我不知道正確的方式來聲明類型。什麼是正確的方法來做到這一點?
公平點,更新。 –
感謝您的回覆,但這裏的解決方案究竟是什麼?我的返回類型應該是什麼? std :: function是一個模板類型,並使用我選擇的模板不能編譯:「錯誤C2893:未能專用函數模板'未知類型std :: invoke(_Callable &&,_類型&& ...)'「 – user650261
正如我寫的,解決方案是顯式地將'std :: bind'的返回值賦給相應的'std :: function',而不是'auto'。 –