混合代码 - 功能成员指针

时间:2012-03-06 12:47:09

标签: c++ fortran member-function-pointers mixed-code

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

你能帮助我吗?

1 个答案:

答案 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_);