Допустим, я хочу связать функцию, а затем передать ее другой функции как 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.
Я предполагаю, что у меня неправильная типизация моего приведения, но я не знаю, как правильно объявить тип. Каков правильный способ сделать это?