खोज…


Boost.Python पर परिचयात्मक उदाहरण

जब आप पायथन प्रोजेक्ट में C ++ लाइब्रेरी का उपयोग करते हैं तो चीजें आसान होती हैं। बस आप बूस्ट का उपयोग कर सकते हैं।

सबसे पहले यहां उन घटकों की सूची दी गई है जिनकी आपको आवश्यकता है:

  • CMakeList.txt फ़ाइल, क्योंकि आप CMake का उपयोग करने जा रहे हैं।
  • C ++ प्रोजेक्ट की C ++ फाइलें।
  • अजगर फ़ाइल - यह आपकी अजगर परियोजना है।

एक छोटी सी ++ फ़ाइल के साथ शुरू करते हैं। हमारी सी ++ परियोजना में केवल एक ही विधि है जो कुछ स्ट्रिंग लौटाती है "यह पहली कोशिश है"। इसे CppProject.cpp कहें

char const *firstMethod() {
    return "This is the first try.";
}

BOOST_PYTHON_MODULE(CppProject) {
    boost::python::def("getTryString", firstMethod); // boost::python is the namespace
}

नीचे एक CMakeLists.txt फ़ाइल रखें:

cmake_minimum_required(VERSION 2.8.3)
FIND_PACKAGE(PythonInterp)
FIND_PACKAGE(PythonLibs)
FIND_PACKAGE(Boost COMPONENTS python)

INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS} ${PYTHON_INCLUDE_DIRS})

PYTHON_ADD_MODULE(NativeLib CppProject)
FILE(COPY MyProject.py DESTINATION .) # See the whole tutorial to understand this line

ट्यूटोरियल के इस भाग के द्वारा सब कुछ इतना आसान है। आप अपने अजगर परियोजना में पुस्तकालय और कॉल विधि को आयात कर सकते हैं। अपने अजगर परियोजना MyProject.py को कॉल करें।

import NativeLib
print (NativeLib.getTryString)

अपनी परियोजना को चलाने के लिए नीचे दिए गए निर्देशों का पालन करें:

  • नाम बिल्ड के साथ एक निर्देशिका बनाएँ।
  • उस निर्देशिका में दर्ज करें।
  • कमांड cmake -DCMAKE_BUILD_TYPE=Release .. दें
  • make
  • python MyProject.py अब, आपको स्ट्रिंग को देखना होगा जो आपके C ++ प्रोजेक्ट में विधि देता है।

रैपिंग स्टैड :: वेक्टर इन बूस्टहोमथॉन

यदि कोई फ़ंक्शन एक std::vector प्रकार लौटाता है, और यह सीधे Python की तरह सामने आता है

std::vector<float> secondMethod() {
    return std::vector<float>();
}

BOOST_PYTHON_MODULE(CppProject) {
    boost::python::def("getEmptyVec", secondMethod);
}

तब जब फ़ंक्शन पायथन कहलाता है, आपको No to_python (by-value) converter found for C++ type: std::vector<float, std::allocator<float> > बताएगा No to_python (by-value) converter found for C++ type: std::vector<float, std::allocator<float> > , क्योंकि Python को पता होना चाहिए कि std::vector कैसे निपटें std::vector

सौभाग्य से boost.python में हमारे लिए एक आवरण funciton प्रदान की गई है vector_indexing_suite.hpp । रिटर्निंग वैल्यू को एक FloatVec ऑब्जेक्ट के रूप में संभाला जा सकता है, जिसके तत्व को [] ऑपरेटर द्वारा एक्सेस किया जा सकता है, जो निम्न आवरण फ़ंक्शन को निम्नानुसार उजागर कर सकता है।

std::vector<float> secondMethod() {
    return std::vector<float>();
}

BOOST_PYTHON_MODULE(CppProject) {
    // wrapper function
    class_<std::vector<float> >("FloatVec")
        .def(vector_indexing_suite<std::vector<float> >());
    boost::python::def("getEmptyVec", secondMethod);
}

परिणाम को केवल कॉलिंग list() और numpy.asarray() द्वारा पायथन सूची या नेम्पी सरणी में परिवर्तित किया जा सकता है।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow