假设我有以下程序:
#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提示符下键入列表时,我得到了
Foreign: add/3
我的问题是如何在我的外语谓词添加中使用其他子例程的结果,比如一个类?假设我的程序中有一个类可以计算一些x和y。显然,x和y将是该类头文件的私有或受保护成员。如何在我的添加谓词中使用x和y?例如,如果我想返回x和y的总和以及add?
的第一和第二个参数干杯,
答案 0 :(得分: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);
}
};