Мне нужно передать указатель на нестатическую функцию-член во внешнюю библиотеку.Функции-члены используют специфичные для объекта переменные, поэтому я не могу сделать их статическими .Тем не менее, я могу получить указатель this
, который указывает на текущий объект.Поэтому я решил написать оболочку, которая может использовать указатель this
для возврата указателя на функцию-член.Но я не могу заставить C ++ перестать выдавать ошибки.Могу ли я получить некоторую помощь?
Я уже пытался 1) вернуть &classname::functionname
2) вернуть functionname
3) приведение типов к указателю void
.Но ничего из этого не работает.Вот почему я выбрал оболочку.
// Member function 1 of class MyClass
// that uses object-specific variables
// and hence cannot be made static
template<typename T> vector<T> MyClass<T>::dxBydt(T x, vector<T> y){
...
...
return dxdt;
}
// Member function 2 of class MyClass
// that uses object-specific variables
// and hence cannot be made static
template<typename T> vector<T> MyClass<T>::res(Matrix<T> bc){
...
...
return r;
}
// ===================
// Wrapper for member function 1
template<typename T> vector<T> (MyClass<T>::*dxBydt_wrapper(void* pointerToObject)) (T, vector<T>) {
MyClass<T>* thisObject = (MyClass<T>*) pointerToObject;
return thisObject->*dxBydt;
}
// Wrapper for member function 2
template<typename T> VectorXm<T> (MyClass<T>::*res_wrapper(void* pointerToObject))(Matrix<T>){
MyClass<T>* thisObject = (MyClass<T>*) pointerToObject;
return thisObject->*res;
}
// Where the action happens
template<typename T> Solution<T> MyClass<T>::solve(){
...
...
...
// odeSolver is external and takes two free function pointers
// but throws errors with member function pointers
solution = odeSolver<T>(..., dxBydt_wrapper(this), res_wrapper(this), ...);
return solution;
}
Я получаю ошибки 1. error: 'dxBydt' was not declared in this scope
и 2. error: 'res' was not declared in this scope
.
Тем не менее, thisObject
должен иметь доступдля обеих вышеуказанных функций.
Не могли бы вы привести меня к решению, чтобы эта оболочка успешно возвращала указатель функции?