2009-12-02 113 views
5

外:Boost.Python的:定義構造函數給定一個類的類

class TCurrency { 
    TCurrency(); 
    TCurrency(long); 
    TCurrency(const std::string); 
    ... 
}; 

與Boost.Python的包裹:

class_<TCurrency>("TCurrency") 
    .def(init<long>) 
    .def(init<const std::string&>) 
    ... 
    ; 

是否有可能創建一個顯示爲構造一個工廠方法在Python:

TCurrency TCurrency_from_Foo(const Foo&) { return TCurrency(); } 

使得在python:

bar = TCurrency(foo) 

回答

12

可以使用make_constructor(未測試):

TCurrency* TCurrency_from_Foo(const Foo&) { return new TCurrency(); } 

class_<TCurrency>("TCurrency") 
    .def("__init__", boost::python::make_constructor(&TCurrency_from_Foo)) 
; 

的參數make_constructor是返回指針[1]〜封裝類的任何函子。其實,函數必須返回一個指針持有者類型,所以如果你的指針持有者是boost::shared_ptr,函數應該返回一個boost :: shared_ptr而不是一個原始指針。

0

可能是my example幫助你--init_python_object函數可以接受你需要的任何參數。簡單說明:我用boost::noncopyable and no_init定義class_t。

相關問題