混合代码-函数成员指针
Mixed-Code - Function Member Pointers
我想从C++代码中调用一个FORTRAN函数。FORTRAN函数类似于
extern "C" { void FORTRANFUNC( void FCN(int*,double*), int *N); }
上面报告的FCN函数是C++类的成员函数
class CppClass
{
...
void FCN(int* a, double* b);
...
};
我想用这种方式调用代码,但似乎这是不可能的:
FORTRANFUNC(myClass.FCN, &n_);
编译器抱怨是因为FORTRAN函数想要一个void FCN函数,而我正在传递一个CppClass::void函数。
你能帮我吗?
成员函数指针不是指针。它们需要在呼叫现场进行特殊处理。由于Fortran代码不太可能知道演练,所以您要做的是不可能的。您必须传递一个自由函数。由于没有针对任意用户数据的void*
参数,因此唯一的解决方法(我强调:这是一个模糊的解决方法)是使用全局调度(好吧,或者动态创建一个thunk,但这并不容易):
CppClass *obj;
void dispatch_fcn(int* a, double* b) {
obj->fcn(a, b);
}
// later:
obj = &myClass;
FCN(dispatch_fcn, &n_);
相关文章:
- 从成员指针到整个结构/类的强制转换
- OOP 中的单成员指针
- 使用结构成员指针在C++中填充结构
- 聚合初始化,将成员指针设置为同一结构成员
- 空指针常量 (nullptr)、空指针值和空成员指针值之间有什么区别?
- 共享 C++ 的数据成员指针
- 如何声明指向成员内容的成员指针m_pmd/m_pmf并访问它们?
- 从类C++外部调用指向成员方法的成员指针
- 结构成员指针是否自动初始化为零?
- 如何删除类内类类型的类成员指针
- 是否打印指向已定义 int 的成员指针
- 指向常量的成员指针
- 通过此指针访问时的成员差异和自身的成员指针(简单的 QT 示例问题)
- 类数据成员指针的非类型模板参数包无法使用 gcc 编译
- 为什么我不能在同一行中定义两个相同类型的类的成员指针
- 将类成员指针传递给 Lambda 捕获列表 c++11
- 在单一实例类中将成员指针设置为 null 的正确方法是什么
- 无法删除在destructor中的成员指针的课程
- 删除对象而不调用成员指针的析构函数
- 当派生类的基类具有成员指针时,对其进行深层复制