2010-03-05 7 views
5

Quelle est la meilleure façon de créer une fonction avec un pointeur en argument avec boost python? Je vois qu'il y a beaucoup de possibilités pour les valeurs de retour dans les docs, mais je ne sais pas comment le faire avec des arguments. En ce quiArgument Pointer pour booster python

void Tesuto::testp(std::string* s) 
{ 
    if (!s) 
     cout << " NULL s" << endl; 
    else 
     cout << s << endl; 
} 

>>> t.testp(None) 
NULL s 
>>>  
>>> s='test' 
>>> t.testp(s) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
Boost.Python.ArgumentError: Python argument types in 
    Tesuto.testp(Tesuto, str) 
did not match C++ signature: 
    testp(Tesuto {lvalue}, std::string*) 
>>>       

Répondre

4

Je peux dire, après avoir fait un peu de googler sur le sujet, est que vous ne pouvez pas. Python ne prend pas en charge les types d'arguments de pointeur par défaut. Si vous le vouliez, vous pourriez probablement modifier l'interpréteur python à la main, mais cela me semble être du code de production, ce qui n'est probablement pas une option.

EDIT: Vous pouvez ajouter une fonction d'emballage comme ceci:

 

std::string * pointer (std::string& p) 
{ 
    return &p; 
} 
 

appeler ensuite votre code avec:

 

>>> s = 'hello' 
>>> t.testp (pointer (s)) 
hello 
>>> 

+0

pour passer une référence en Boost.Python quels un problème, nous ne pouvons que passer la référence const, à moins d'implémenter notre propre wrapper de référence, avez-vous une idée de la façon de mettre en œuvre cela? –