2010-03-05 20 views
5

¿Cuál es la mejor manera de hacer que una función que tenga un puntero como argumento funcione con boost python? Veo que hay muchas posibilidades para los valores de retorno en los documentos, pero no sé cómo hacerlo con argumentos.Argumento del puntero para impulsar 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*) 
>>>       

Respuesta

4

Por lo que yo puedo decir, después de hacer un poco de google sobre el tema, es que no se puede. Python no admite tipos de argumentos de puntero de forma predeterminada. Si quisieras, probablemente podrías editar el intérprete de Python a mano, pero me parece que es un código de producción de algún tipo, por lo que probablemente no sea una opción.

EDITAR: Se podría agregar una función de contenedor de este modo:

 

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

luego llame a su código con:

 

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

+0

a pasar una referencia en Boost.Python está un problema, solo podemos pasar la referencia constante, a menos que implementemos nuestro propio contenedor de referencia, ¿tiene alguna idea de cómo implementarlo? –

Cuestiones relacionadas