2016-10-10 64 views
-1

我是新來提高Python和我期待揭露一類,看起來像這樣含有構造函數的嵌套私有類的構造函數:揭露一類使用Boost Python的

///Header File structure 
class A 
{ public: 
    A(); 
    ~A(); 
    void B(); 
    private: 
    class Impl; 
    std::unique_ptr Impl impl_; 
}; 
///Class Implementation 
class A::Impl 
{ 
    public: 
    void C();  
} 
A::A():impl_(new Impl) 
{ 
} 
A::~A() 
{ 
} 
void A::B() 
{ 
void C(); 
} 

可有人建議如何,因爲我一直在嘗試,目前的方法給出了錯誤,因爲默認地將Impl是私有的,也是一個訪問已刪除的功能錯誤做到這一點:

BOOST_PYTHON_MODULE(libA) 
{ 
class_<A::Impl>("Impl") 
    .def("C", &A::Impl::C) 
class_<A>("A",init<std::unique_ptr>) 
    .def("B", &A::B) 
    } 

回答

1

PIMPL方法的全部意義在於,它是私有的,完全透明的該課程的用戶。你不要暴露它。

你需要做的是明確表示A是不可拷貝:

class_<A, noncopyable>("A", init<>()) 
    .def("B", &A::B) 
; 
+0

謝謝。這很好,就像我這樣的新用戶一樣,noncopyable關鍵字在boost命名空間中。 –

+0

@arunabhsharma'noncopyable'是* class *,不是關鍵字。 – Barry