2010-03-05 9 views
5

बूस्ट पायथन के साथ तर्क के रूप में पॉइंटर के रूप में एक फ़ंक्शन बनाने का सबसे अच्छा तरीका क्या है? मुझे लगता है कि दस्तावेज़ों में वापसी मूल्यों के लिए कई संभावनाएं हैं, लेकिन मुझे नहीं पता कि तर्कों के साथ इसे कैसे किया जाए।पायथन को बढ़ावा देने के लिए सूचक तर्क

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

उत्तर

4

जहां तक ​​मैं कह सकता हूं, इस विषय पर थोड़ी सी गुगल करने के बाद, यह नहीं है कि आप नहीं कर सकते। पायथन डिफ़ॉल्ट रूप से पॉइंटर तर्क प्रकार का समर्थन नहीं करता है। यदि आप चाहते थे, तो आप शायद हाथ से पाइथन दुभाषिया को संपादित कर सकते हैं, लेकिन ऐसा लगता है कि मुझे कुछ प्रकार का उत्पादन कोड होना चाहिए, ताकि शायद यह कोई विकल्प न हो।

संपादित: तुम कितने तरह एक आवरण समारोह जोड़ सकते हैं:

 

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

फिर साथ अपने कोड फोन:

 

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

+0

boost.python में एक संदर्भ पारित करने के लिए है एक समस्या, हम केवल अपने संदर्भ संदर्भ लपेटने के लिए कॉन्स्ट संदर्भ पास कर सकते हैं, क्या आपको इसका कोई विचार है कि इसे कैसे कार्यान्वित किया जाए? –