无法运行包装器以返回成员函数指针

时间:2019-04-28 19:07:29

标签: c++ pointers c++17

我需要将指向非静态成员函数的指针传递给外部库。成员函数使用特定于对象的变量,因此我不能使它们成为 static 。但是,我可以获得指向当前对象的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应该可以同时使用上述两个功能。

能不能请我提供一个解决方案,以便该包装器成功返回函数指针?

0 个答案:

没有答案