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

CppClass :: void関数を渡しているときに、FORTRAN関数がvoid FCN関数を必要としているため、コンパイラーは文句を言います。

手伝って頂けますか?

4

1 に答える 1

1

メンバー関数ポインターはポインターではありません。呼び出しサイトで特別な処理が必要です。Fortran コードはドリルを知らない可能性が高いので、あなたがしようとしていることは不可能です。代わりに無料の関数を渡す必要があります。任意のユーザー データには引数がないvoid*ため、唯一の回避策 (強調しておきますが、これは厄介な回避策です) は、ディスパッチにグローバルを使用することです (または、サンクを動的に作成しますが、それほど簡単ではありません)。

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 に答える