मैं पाइथन से सी ++ कक्षा विधि में संदर्भ द्वारा एक साधारण कॉल करने की कोशिश कर रहा हूं।संदर्भ तर्क के साथ बूथ पायथन विधि कॉल
मेरे सी ++ कोड लगता है:
class Foo {
protected:
int _internalVal;
public:
Foo() : _internalVal(5){}
void getVal(int& val_io) {val_io = _internalVal;}
void getValDoesNothing(int val_io) {val_io = _internalVal;}
}
मेरे बढ़ावा आवरण कोड है जो ठीक संकलित है:
BOOST_PYTHON_MODULE(libBar) {
boost::python::class_<Foo>("Foo")
.def("getVal", &Foo::getVal)
.def("getValDoesNothing", &Foo::getValDoesNothing);
}
लेकिन जब मैं निम्नलिखित अजगर कॉल कर:
In [1]: import libBar
In [2]: f = libBar.Foo()
In [3]: f
Out[3]: <libBar.Foo at 0x2b483c0>
In [4]: val = int()
In [5]: #next command is just to check function signature type
In [6]: f.getValDoesNothing(val)
In [7]: f.getVal(val)
---------------------------------------------------------------------------
ArgumentError Traceback (most recent call last)
<ipython-input-5-531e4cea97c2> in <module>()
----> 1 f.getVal(val)
ArgumentError: Python argument types in
Foo.getVal(Foo, int)
did not match C++ signature:
getVal(Foo {lvalue}, int {lvalue})
मैं मैं एक पुस्तकालय के साथ काम कर रहा हूं, मैं नियंत्रण नहीं करता हूं इसलिए मूल्य वापस करने के लिए getVal बदलना एक विकल्प नहीं है।
क्या अंतिम पायथन कमांड काम करने का कोई तरीका है?
मैं एक ऐसा फ़िक्स भी लेगा जो पाइथन वैरिएबल को नहीं बदलेगा लेकिन फिर भी फ़ंक्शन कॉल की अनुमति देता है।
मुझे पता है कि मैं एक संदर्भ में गुजर रहा हूं। मेरा सवाल यह है कि मैं यह कैसे कर सकता हूं? –