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
.
精彩评论