2010-03-05 25 views
5

Yükseltici olarak işaretçi içeren bir işlevi güçlendirmenin python ile çalışmasının en iyi yolu nedir? Görüyorum ki, dokümanlardaki geri dönüş değerleri için birçok olasılık var, ancak bunu argümanlarla nasıl yapacağımı bilmiyorum.Python'u güçlendirmek için işaretçi argümanı

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*) 
>>>       

cevap

4

Anlatabildiğim kadarıyla, konu hakkında biraz araştırma yaptıktan sonra yapamayacağınızdır. Python, varsayılan olarak işaretçi argüman türlerini desteklemez. İsterseniz, muhtemelen python yorumlayıcısını elle düzenleyebilirsiniz, ancak bu bana bir çeşit üretim kodu gibi görünebilir, bu yüzden muhtemelen bir seçenek değildir.

DÜZENLEME: Öyle gibi bir sarıcı işlevi ekleyebilirsiniz:

 

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

Sonra kodunuzu çağırır:

 

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

+0

boost.python bir başvuru geçmesine edilir bir sorun, kendi referans sargıcımızı uygulamadıkça, yalnızca referansı geçebiliriz, bunu nasıl uygulayacağınıza dair herhangi bir fikriniz var mı? –