5

给定一个类:

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)
4

2 回答 2

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] 的任何函子。

[1] 实际上,该函数必须返回一个指针持有者类型,所以如果您的指针持有者是boost::shared_ptr,该函数应该返回一个 boost::shared_ptr 而不是原始指针。

于 2010-01-22T17:46:51.290 回答
0

可能是我的示例对您有所帮助 - init_python_object 函数可以采用您需要的任何参数。简单说明:我用boost::noncopyable and no_init.

于 2009-12-11T11:10:22.560 回答