2009-12-02 19 views
5

Data una classe:Boost.Python: Definire un costruttore di fuori di una classe

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

Spostato con Boost.Python:

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

E 'possibile creare un metodo factory che appare come un costruttore in Python:

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

Tale che in pitone:

bar = TCurrency(foo) 

risposta

12

È possibile utilizzare make_constructor (non testata):

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

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

L'argomento di make_constructor è un qualsiasi functor che restituisce un puntatore [1] per la classe avvolto.

[1] In realtà, la funzione deve restituire un tipo di supporto puntatore, quindi se il titolare del puntatore è boost::shared_ptr, la funzione dovrebbe restituire un boost :: shared_ptr anziché un puntatore raw.

0

può essere my example aiuta - la funzione init_python_object può prendere qualsiasi parametro necessario. Nota semplice: definisco class_t con boost::noncopyable and no_init.

Problemi correlati