2011-09-28 19 views
17

supponga esistere una certa classe Foo con due metodi di overload:spinta-python scegliere tra i metodi di overload

class Foo 
{ 
    ... 
    void m1(A& a); 
    void m1(B& b); 

ho bisogno di esporre uno di questi metodi oltre spinta-python:

boost::python::class_<Foo>("Foo") 
    .def("m1", &Foo::m1) 

Come devo specificare che la firma di m1(A&a) deve essere utilizzato nel corso m1(B&b)

risposta

23
void (Foo::*m1)(A&) = &Foo::m1; 
boost::python::class_<Foo>("Foo") 
    .def("m1", m1) 
20

Solo per il completamento, è anche possibile avere entrambi esposti al fianco di pitone:

void (Foo::*m1_a)(A&) = &Foo::m1; 
void (Foo::*m1_b)(B&) = &Foo::m1; 

boost::python::class_<Foo>("Foo") 
    .def("m1", m1_a) 
    .def("m1", m1_b) 
2

È possibile utilizzare static_cast per specificare che la firma da utilizzare. Con questo metodo, non è necessario creare un puntatore a funzione con nome mantenendo anche la risoluzione di sovraccarico nel contesto di una singola riga.

boost::python::class_<Foo>("Foo") 
    .def("m1", static_cast<void (Foo::*)(A&)>(&Foo::m1)) 
    .def("m1", static_cast<void (Foo::*)(B&)>(&Foo::m1)) 
Problemi correlati