我想从我的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函数。
你能帮助我吗?
答案 0 :(得分:1)
成员函数指针不是指针。他们需要在呼叫现场进行特殊处理。由于Fortran代码不太可能知道演练,所以你想要做的事情是不可能的。您必须通过免费功能。由于任意用户数据没有void*
参数,因此唯一的解决方法(我强调:这是非常简单的解决方法),您需要使用全局进行调度(嗯,或创建)一个动态的thunk,但这并不容易):
CppClass *obj;
void dispatch_fcn(int* a, double* b) {
obj->fcn(a, b);
}
// later:
obj = &myClass;
FCN(dispatch_fcn, &n_);