Boost.Python:在类外定义构造函数
Posted
技术标签:
【中文标题】Boost.Python:在类外定义构造函数【英文标题】:Boost.Python: Defining a constructor outside a class 【发布时间】:2009-12-02 19:04:58 【问题描述】:给定一个类:
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)
【问题讨论】:
【参考方案1】:您可以使用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 而不是原始指针。
【讨论】:
【参考方案2】:可能是my example 可以帮助您 - init_python_object 函数可以采用您需要的任何参数。简单说明:我用boost::noncopyable and no_init
定义class_t。
【讨论】:
以上是关于Boost.Python:在类外定义构造函数的主要内容,如果未能解决你的问题,请参考以下文章