混合代码-函数成员指针



我想从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_);

最新更新