Повышение. Python: Определение конструктора вне класса

Учитывая класс:

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)
5
задан James Emerton 2 December 2009 в 19:04
поделиться

2 ответа

Вы можете использовать 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 вместо сырого указателя.

12
ответ дан 13 December 2019 в 05:36
поделиться

Может быть мой пример поможет вам - функция init_python_object может принимать любые параметры, которые вам нужны. Простое примечание: я определяю class_t с помощью boost :: noncopyable и no_init .

0
ответ дан 13 December 2019 в 05:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: