2010-05-08 3 views
0

Supposons que j'ai le programme ci-dessous:PREDICATE (nom, arité)

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

Quand je compile, il relie Prolog et C++ et lance ensuite l'invite de commande Prolog.

Tout ce que j'ai dans myFile.pl est

:- use_module(library(shlib)). 

Quand je type de liste à l'invite Prolog, je reçois

Foreign: add/3 

Ma question est de savoir comment puis-je utiliser le résultat d'un autre sous-programme , disons une classe, dans mon prédicat étranger ajouter? Disons que j'ai un cours quelque part dans mon programme qui calcule quelques x et y. De toute évidence, x et y seraient des membres privés ou protégés du fichier d'en-tête de cette classe. Comment utiliser x et y dans mon prédicat d'ajout? Par exemple, si je voulais retourner la somme de x et y et les premier et deuxième arguments d'ajouter?

Cheers,

Répondre

0

S'il est nécessaire d'appeler du code externe sur les membres privés de classes, alors ces classes doivent appeler le code externe. Le code doit être "C" et pas "C++" compilé, afin de préserver les noms de symboles.

Dans ce cas, la classe avec le privé x, y devrait appeler add (x, y) et obtenir le résultat. La classe a besoin d'une méthode pour lui dire d'appeler le add/3 externe.

extern "C" int add(int x, int y); 
class Priv{ 
     int x,y; 
     public: 
     int privadd(void){ 
      return add(x,y); 
     } 
    }; 
Questions connexes