1

我想从我的 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 函数。

你能帮助我吗?

4

1 回答 1

1

成员函数指针不是指针。他们需要在呼叫站点进行特殊处理。由于 Fortran 代码不太可能知道该练习,因此您尝试做的事情是不可能的。您必须改为传递一个自由函数。由于没有void*针对任意用户数据的参数,因此唯一的解决方法(我强调:这是一个非常糟糕的解决方法)是使用全局进行调度(好吧,或者动态创建一个 thunk,但这并不容易):

CppClass *obj;
void dispatch_fcn(int* a, double* b) {
    obj->fcn(a, b);
}

// later:
obj = &myClass;
FCN(dispatch_fcn, &n_);
于 2012-03-06T15:57:15.817 回答