Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
混合代码-函数成员指针 我想从C++代码中调用FORTRAN函数。FORTRAN函数是这样的 extern "C" { void FORTRANFUNC( void FCN(int*,double*), int *N); } 上述FCN函数是C++类的成员函数 class CppClass { ... void FCN(int* a, double* b); ... };_C++_Fortran_Member Function Pointers_Mixed Code - Fatal编程技术网

混合代码-函数成员指针 我想从C++代码中调用FORTRAN函数。FORTRAN函数是这样的 extern "C" { void FORTRANFUNC( void FCN(int*,double*), int *N); } 上述FCN函数是C++类的成员函数 class CppClass { ... void FCN(int* a, double* b); ... };

混合代码-函数成员指针 我想从C++代码中调用FORTRAN函数。FORTRAN函数是这样的 extern "C" { void FORTRANFUNC( void FCN(int*,double*), int *N); } 上述FCN函数是C++类的成员函数 class CppClass { ... void FCN(int* a, double* b); ... };,c++,fortran,member-function-pointers,mixed-code,C++,Fortran,Member Function Pointers,Mixed Code,我希望以这种方式调用代码,但似乎不可能: FORTRANFUNC(myClass.FCN, &n_); 编译器抱怨是因为FORTRAN函数需要一个void FCN函数,而我正在传递一个CppClass::void函数 您能帮助我吗?成员函数指针不是指针。它们需要在呼叫现场进行特殊处理。因为Fortran代码不太可能知道演练,所以您试图做的是不可能的。您必须传递一个自由函数。由于没有针对任意用户数据的void*参数,因此唯一的解决方法(我强调:这是一个非常的解决方法)是使用全局调度(或者

我希望以这种方式调用代码,但似乎不可能:

FORTRANFUNC(myClass.FCN, &n_);
编译器抱怨是因为FORTRAN函数需要一个void FCN函数,而我正在传递一个CppClass::void函数


您能帮助我吗?

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


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


添加了C++标签,因为在那里没有Fortran行,而我是FORTRAN程序员而不是C++,不能理解它。事实上,我很惊讶,它可以将C空虚函数传递给FORTRAN(77假设)子程序。添加了C++标签,因为在那里没有Fortran行,而我是FORTRAN程序员而不是C++,不能理解它。事实上,我很惊讶,它可以将C空虚函数传递给FORTRAN(77假设)子程序。
CppClass *obj;
void dispatch_fcn(int* a, double* b) {
    obj->fcn(a, b);
}

// later:
obj = &myClass;
FCN(dispatch_fcn, &n_);