0

以下のプログラムがあるとします。

#include files

PREDICATE( add, 3 )
{
    return A3 = (long)A1 + (long)A2;
}

int main( int argc, char** argv )
{
    PlEngine e( argv[0] );
    PlCall( "consult('myFile.pl')" );
    PL_halt( PL_toplevel() ? 0 : 1 );
}

コンパイルすると、Prolog と C++ がリンクされ、Prolog コマンド プロンプトが起動します。

myFile.pl にあるのは

:- use_module( library(shlib) ).

Prologプロンプトでlistingと入力すると、

Foreign: add/3

私の質問は、外部述語の追加で、クラスなどの他のサブルーチンの結果をどのように使用するのですか? プログラムのどこかに x と y を計算するクラスがあるとします。明らかに、x と y は、そのクラスのヘッダー ファイルのプライベートまたは保護されたメンバーになります。add 述語で x と y を使用するにはどうすればよいですか? たとえば、x と y の合計と、add の 1 番目と 2 番目の引数を返したい場合は?

乾杯、

4

1 に答える 1

0

クラスのプライベート メンバーで外部コードを呼び出す必要がある場合、それらのクラスは外部コードを呼び出す必要があります。シンボル名を保持するために、コードは「C++」ではなく「C」でコンパイルする必要があります。

この場合、プライベート x,y を持つクラスは、add(x,y) を呼び出して結果を取得する必要があります。クラスには、外部を呼び出すように指示するメソッドが必要add/3です。

 extern "C" int add(int x, int y);
 class Priv{
        int x,y;
      public:
        int privadd(void){
            return add(x,y);
        }
   }; 
于 2010-10-22T00:35:06.123 に答える