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:在类外定义构造函数的主要内容,如果未能解决你的问题,请参考以下文章

Python 类的构造,继承,多重继承

如何在模板类之外定义构造函数[重复]

简析四大函数

C++学习 之 类中的特殊函数和this指针

构造函数 析构函数 拷贝构造函数 ~~~~~~~~~~拷贝构造函数

Boost.Python - 参数化构造函数出错