2012-04-13 10 views
12

मैं सी ++ कक्षा को लपेटने के लिए boost :: पायथन का उपयोग करता हूं। यह वर्ग कॉपी कन्स्ट्रक्टर की अनुमति नहीं देता है, लेकिन पायथन मॉड्यूल हमेशा एक बनाना चाहता है।boost :: पायथन: संकलन विफल रहता है क्योंकि कॉपी कन्स्ट्रक्टर निजी है

सी ++ वर्ग की तरह इस (सरलीकृत) लग रहा है

class Foo { 
    public: 
    Foo(const char *name); // constructor 

    private: 
    ByteArray m_bytearray; 
}; 

bytearray वर्ग बढ़ावा :: noncopyable से विरासत में मिला है, इसलिए फू प्रतिलिपि कंस्ट्रक्टर्स जरूरत नहीं है।

BOOST_PYTHON_MODULE(Foo) 
{ 
    class_<Foo>("Foo", init<const char *>()) 
    ; 
} 

जब बढ़ावा :: अजगर मॉड्यूल संकलन, मैं त्रुटियों कि फू के लिए एक प्रतिलिपि निर्माता क्योंकि bytearray बढ़ावा :: noncopyable से विरासत नहीं बनाया जा सकता है:

यहाँ पायथन मॉड्यूल ठूंठ है।

मैं अपने पायथन मॉड्यूल में कॉपी कन्स्ट्रक्टर को कैसे अक्षम कर सकता हूं?

धन्यवाद क्रिस्टोफ

उत्तर

36

मुझे मिल गया। मुझे boost :: noncopyable निर्दिष्ट करना है:

BOOST_PYTHON_MODULE(Foo) 
{ 
    class_<Foo, boost::noncopyable>("Foo", init<const char *>()) 
    ; 
} 
संबंधित मुद्दे