Ответ 1
void (Foo::*m1)(A&) = &Foo::m1;
boost::python::class_<Foo>("Foo")
.def("m1", m1)
Предположим, что существует некоторый класс 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)
void (Foo::*m1)(A&) = &Foo::m1;
boost::python::class_<Foo>("Foo")
.def("m1", m1)
Просто для завершения также возможно, чтобы оба они были открыты со стороны 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)
Вы можете использовать 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))