अंत में मैं [] ऑपरेटर का उपयोग कर पायथन में std :: वेक्टर का उपयोग करने में सक्षम हूं। चाल बढ़ावा सी ++ आवरण जो आंतरिक वेक्टर सामान संभालती में एक कंटेनर प्रदान सरल करने के लिए है:बूस्ट :: पायथन: पायथन सूची std :: vector
#include <boost/python.hpp>
#include <vector>
class world
{
std::vector<double> myvec;
void add(double n)
{
this->myvec.push_back(n);
}
std::vector<double> show()
{
return this->myvec;
}
};
BOOST_PYTHON_MODULE(hello)
{
class_<std::vector<double> >("double_vector")
.def(vector_indexing_suite<std::vector<double> >())
;
class_<World>("World")
.def("show", &World::show)
.def("add", &World::add)
;
}
अन्य चुनौती है: Howto std :: वैक्टर में अजगर सूचियों अनुवाद न करें? मैं एक std :: पैरामीटर के रूप में वेक्टर की उम्मीद कर एक C++ वर्ग जोड़ने की कोशिश की और इसी आवरण कोड कहा:
#include <boost/python.hpp>
#include <vector>
class world
{
std::vector<double> myvec;
void add(double n)
{
this->myvec.push_back(n);
}
void massadd(std::vector<double> ns)
{
// Append ns to this->myvec
}
std::vector<double> show()
{
return this->myvec;
}
};
BOOST_PYTHON_MODULE(hello)
{
class_<std::vector<double> >("double_vector")
.def(vector_indexing_suite<std::vector<double> >())
;
class_<World>("World")
.def("show", &World::show)
.def("add", &World::add)
.def("massadd", &World::massadd)
;
}
लेकिन ऐसा करते हैं, मैं निम्नलिखित Boost.Python.ArgumentError साथ अंत:
>>> w.massadd([2.0,3.0])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
Boost.Python.ArgumentError: Python argument types in
World.massadd(World, list)
did not match C++ signature:
massadd(World {lvalue}, std::vector<double, std::allocator<double> >)
क्या कोई मुझे बता सकता है कि मैं अपने सी ++ फ़ंक्शन के भीतर पाइथन सूचियों का उपयोग कैसे कर सकता हूं?
धन्यवाद, डैनियल
'बूस्ट :: पायथन :: सूची' विषम हो सकता है, और आप 'निकालने' से अपवादों को पकड़ने के लिए आह्वान करते हैं। – eudoxos
मेरी माफी, 'निकालने' से अपवाद का स्वचालित रूप से पायथन में अनुवाद किया जाएगा। माफ़ कीजिये। – eudoxos
हाँ अच्छा और सरल करने के लिए, बस बूस्ट पायथन दस्तावेज इतना खराब है, और ऑपरेटर [] एक टेम्पलेट ऑब्जेक्ट_ऑपरेटर्स में छिपी हुई है पदानुक्रम को कई परतें और स्पष्ट रूप से एक ऑपरेशन एक सूची नहीं है। मुझे उनकी वेबसाइट प्रलेखन अब और अधिक अनुकूल नहीं मिला है। लेंस() बाहरी विधि बनाना उतना अच्छा नहीं है जितना लगता है कि यह या तो है। इसके अलावा यह फिर से शुरू करने का एकमात्र तरीका है? – CashCow