को बढ़ावा देने के लिए `__str__` विधि जोड़ने के दौरान समस्याएं बनाएं I बूस्ट पायथन के साथ थोड़ा सा खेलना शुरू कर दिया है और एक समस्या में भाग गया है। मैंने एक सी ++ वर्ग को पायथन में बेनकाब करने की कोशिश की जिसमें कोई समस्या नहीं आई। लेकिन मुझे बिल्डिंग त्रुटियों के बिना कक्षा के लिए __str__
कार्यक्षमता को लागू करने के लिए प्रबंधन प्रतीत नहीं होता है, मुझे समझ में नहीं आता है।पायथन सी ++ कक्षा
मैं बूस्टप्रो द्वारा बूस्ट 1_42 प्रीबिल्ड का उपयोग कर रहा हूं। मैं cmake और बनाम 2010 संकलक का उपयोग कर पुस्तकालय का निर्माण।
मेरे पास एक बहुत ही सरल सेटअप है। हैडर फ़ाइल (tutorial.h) ऐसा दिखाई देता है:
#include <iostream>
namespace TestBoostPython{
class TestClass {
private:
double m_x;
public:
TestClass(double x);
double Get_x() const;
void Set_x(double x);
};
std::ostream &operator<<(std::ostream &ostr, const TestClass &ts);
};
और इसी cpp फ़ाइल लगता है:
#include <boost/python.hpp>
#include "tutorial.h"
using namespace TestBoostPython;
TestClass::TestClass(double x)
{
m_x = x;
}
double TestClass::Get_x() const
{
return m_x;
}
void TestClass::Set_x(double x)
{
m_x = x;
}
std::ostream &operator<<(std::ostream &ostr, const TestClass &ts)
{
ostr << ts.Get_x() << "\n";
return ostr;
}
BOOST_PYTHON_MODULE(testme)
{
using namespace boost::python;
class_<TestClass>("TestClass", init<double>())
.add_property("x", &TestClass::Get_x, &TestClass::Set_x)
.def(str(self))
;
}
CMakeLists.txt ऐसा दिखाई देता है:
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
project (testme)
FIND_PACKAGE(Boost REQUIRED)
FIND_PACKAGE(Boost COMPONENTS python REQUIRED)
FIND_PACKAGE(PythonLibs REQUIRED)
set(Boost_USE_STATIC_LIBS OFF)
set(Boost_USE_MULTITHREAD ON)
INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS})
INCLUDE_DIRECTORIES (${PYTHON_INCLUDE_PATH})
add_library(testme SHARED tutorial.cpp)
target_link_libraries(testme ${Boost_PYTHON_LIBRARY})
target_link_libraries(testme ${PYTHON_LIBRARY}
Compiling...
tutorial.cpp
C:\Program Files (x86)\boost\boost_1_42\boost/python/def_visitor.hpp(31) : error C2780: 'void boost::python::api::object_operators::visit(ClassT &,const char *,const boost::python::detail::def_helper &) const' : expects 3 arguments - 1 provided
with
[
U=boost::python::api::object
]
C:\Program Files (x86)\boost\boost_1_42\boost/python/object_core.hpp(203) : see declaration of 'boost::python::api::object_operators::visit'
with
[
U=boost::python::api::object
]
C:\Program Files (x86)\boost\boost_1_42\boost/python/def_visitor.hpp(67) : see reference to function template instantiation 'void boost::python::def_visitor_access::visit,classT>(const V &,classT &)' being compiled
with
[
DerivedVisitor=boost::python::api::object,
classT=boost::python::class_,
V=boost::python::def_visitor
]
C:\Program Files (x86)\boost\boost_1_42\boost/python/class.hpp(225) : see reference to function template instantiation 'void boost::python::def_visitor::visit>(classT &) const' being compiled
with
[
DerivedVisitor=boost::python::api::object,
W=TestBoostPython::TestClass,
classT=boost::python::class_
]
.\tutorial.cpp(29) : see reference to function template instantiation 'boost::python::class_ &boost::python::class_::def(const boost::python::def_visitor &)' being compiled
with
[
W=TestBoostPython::TestClass,
U=boost::python::api::object,
DerivedVisitor=boost::python::api::object
]
:
निर्माण त्रुटि मैं निम्नलिखित है
क्या किसी को भी wrrong क्या हुआ पर कोई विचार है? यदि मैं रैपर कोड से .def (str (self)) भाग को हटा देता हूं, तो सबकुछ ठीक से संकलित होता है और कक्षा पायथन से उपयोग योग्य होती है। मैं सहायता के लिए बहुत अच्छा होगा।
धन्यवाद, रिकार्ड
संपादित करें: एक स्थिरांक
अच्छा! मैंने शुरुआती रूप से सावधानी से नहीं देखा और ऑपरेटर को परिभाषित किया << कक्षा में खुद के नाम के बजाए कक्षा में, जिसने इसे पायथन में एक प्रिंट (myObj) कॉल करने के लिए काम करने में सभी अंतर किए। अच्छा काम रिकार्ड। हालांकि मैंने देखा कि मुझे अभी भी अपनी ऑब्जेक्ट को प्रस्तुत करने के लिए प्रिंट को स्पष्ट रूप से प्रिंट करने की आवश्यकता है क्योंकि मैं पाइथन में चाहता हूं। तो मैं बस अपना वस्तु दर्ज यह परिणाम देता है अगर मैं प्रकार (myObj) कहा जाता है, पायथन के लिए डिफ़ॉल्ट व्यवहार हो सकता है, शायद मैं हालांकि आर या Matlab में अनुभव के साथ घुलमिल जाएं रहा हूँ। – jxramos