2011-09-28 17 views
17

suponga que existen algunos Foo clase con dos métodos sobrecargados:impulso-pitón seleccionar entre los métodos sobrecargados

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

necesito exponer uno de estos métodos más impulso en Python:

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

¿Cómo debería especificar que la firma del m1(A&a) se debe utilizar más de m1(B&b)

Respuesta

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

Sólo para completar, también es posible tener ambos expuestos en el lado de pitón:

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

Se puede utilizar para especificar qué static_cast firma a utilizar. Con este método, no es necesario crear un puntero de función nombrada al mismo tiempo que se mantiene la resolución de sobrecarga en el contexto de una sola línea.

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