开发者

Boost.Python: Defining a constructor outside a class

Given a class:

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

Wrapped with Boost.Python:

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

Is it possible to crea开发者_运维百科te a factory method that appears as a constructor in Python:

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

Such that in python:

bar = TCurrency(foo)


You can use make_constructor (untested):

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

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

The argument to make_constructor is any functor that returns a pointer[1] to the wrapped class.

[1] Actually, the function must return a the pointer holder type, so if your pointer holder is boost::shared_ptr, the function should return a boost::shared_ptr instead of a raw pointer.


May be my example helps you - init_python_object function can take any parameters that you need. Simple note: I define class_t with boost::noncopyable and no_init.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜