2009-12-02 68 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。

相关问题