Учитывая класс:
class TCurrency {
TCurrency();
TCurrency(long);
TCurrency(const std::string);
...
};
Перенесенный с повышением. 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)
Вы можете использовать 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
, функция должна вернуть усиление :: Shared_ptr вместо сырого указателя.
Может быть мой пример поможет вам - функция init_python_object может принимать любые параметры, которые вам нужны. Простое примечание: я определяю class_t с помощью boost :: noncopyable и no_init
.