Невозможно запустить оболочку для возврата указателя на функцию-член - PullRequest
0 голосов
/ 28 апреля 2019

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

Не могли бы вы привести меня к решению, чтобы эта оболочка успешно возвращала указатель функции?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...