我需要将指向非静态成员函数的指针传递给外部库。成员函数使用特定于对象的变量,因此我不能使它们成为 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
应该可以同时使用上述两个功能。
能不能请我提供一个解决方案,以便该包装器成功返回函数指针?