2013-10-08 5 views
7

Cython हमें सी ++ आयात करने के लिए मानक पुस्तकालय डेटा संरचनाओं एक आसान तरीका, उदा .:क्या सी ++ 11 कंटेनर साइथन द्वारा समर्थित हैं? <code>std::unordered_map</code>, <code>std::unordered_set</code> आदि वे उसी तरह से समर्थित हैं:

from libcpp.vector cimport vector 
    from libcpp.utility cimport pair 

लेकिन क्या सी ++ 11 के साथ शुरू की नए कंटेनर के बारे में देता है? मुझे उचित आयात विवरण नहीं मिला।

उत्तर

-2

साइथन डिफ़ॉल्ट रूप से उनका समर्थन नहीं करता है, लेकिन आप शायद https://github.com/cython/cython/blob/master/Cython/Includes/libcpp/map.pxd की संरचना के बाद अपना स्वयं का इंटरफ़ेस बना सकते हैं।

साइथन अब 0.20.2 के बाद से unordered_map और unordered_set का समर्थन करता है।

from libcpp.unordered_map cimport unordered_map 
from libcpp.unordered_set cimport unordered_set 
+1

यह उत्तर शायद उस समय सही था, लेकिन अब पुराना है। –

14

वर्तमान साइथन संस्करण उन्हें अनुमति देते हैं।

ext_module = Extension(
    "foo", 
    ["foo.pyx"], 
    language="c++", 
    extra_compile_args=["-std=c++11"], 
    extra_link_args=["-std=c++11"] 
) 

फिर आप की तरह

from libcpp.unordered_map cimport unordered_map 

उपयोग कर सकते हैं किसी भी अन्य एसटीएल वर्ग के लिए:

सुनिश्चित करें कि आपके setup.py की तरह कुछ में शामिल करें।

+0

यह अब (वर्तमान में) साइथन के साथ काम नहीं कर रहा है: '/usr/local/lib/python2.7/dist-packages/Cython/Compiler/Main.py4454: उपयोगकर्ता चेतावनी: अज्ञात संकलन विकल्प प्राप्त करें, कृपया निकालें: extra_link_args, extra_compile_args' (और फिर यह C++ 11-संबंधित त्रुटि के साथ विफल रहता है)। मेरा setup.py जैसा दिखता है: 'ext_modules = cythonize ('x.pyx', भाषा = 'C++', )'। –

+0

@ डेविड आपको सीधे साइथोनिज़() में पैरामीटर निर्दिष्ट करने के बजाय एक्सटेंशन() वाक्यविन्यास का उपयोग करना होगा। –

संबंधित मुद्दे