Подтвердить что ты не робот

Boost-python выбор между перегруженными методами

Предположим, что существует некоторый класс Foo с двумя перегруженными методами:

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

Мне нужно разоблачить один из этих методов над boost-python:

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

Как я должен указать, что подпись m1(A&a) должна использоваться над m1(B&b)

4b9b3361

Ответ 1

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

Ответ 2

Просто для завершения также возможно, чтобы оба они были открыты со стороны python:

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)

Ответ 3

Вы можете использовать static_cast, чтобы указать, какую подпись использовать. С помощью этого метода вам не нужно создавать именованный указатель функции, одновременно сохраняя разрешение перегрузки в контексте одной строки.

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