2010-05-08 21 views
0

假设我有下面的程序:PREDICATE(名称,元数)

#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)). 

当我输入在序言提示上市,我得到

Foreign: add/3 

我的问题是我怎么使用一些其他的子程序的结果,说一个类,在我的外国谓词中加入?比方说,我在我的程序中有一个类可以计算一些x和y。很明显,x和y将是该类头文件的私有或受保护成员。我如何在我的添加谓词中使用x和y?例如,如果我想返回x和y以及add的第一个和第二个参数的总和?

干杯,

回答

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