c++ - 无法运行包装器以返回成员函数指针
问题描述
我需要将指向非静态成员函数的指针传递给外部库。成员函数使用特定于对象的变量,所以我不能将它们设为 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
应该可以访问上述两个功能。
你能否引导我找到一个解决方案,以便这个包装器成功返回一个函数指针?
解决方案
推荐阅读
- html - 带有主体背景 SVG 纹理的 CSS 形状分波器
- reactjs - 提交错误未显示在反应最终表单上
- ios - 无法安装 iOS IPA 文件,因为无法验证其完整性
- android - 询问 E/RecyclerView:未连接适配器;跳过布局
- javascript - 我正在尝试让一个不和谐的机器人根据有人加入服务器后的时间来分配角色
- kubernetes - 构建自己的分布式系统和使用 Kubernetes 部署我的应用程序之间的权衡
- react-native - React Native TouchableOpacity 全宽样式不起作用
- macos - 具有鼠标指针中心的 SwiftUI ScaleEffect 图像
- sql - 从具有内连接的列中找出零频率值
- javascript - 计算两个字符串之间的匹配词数