Перегрузки статического метода Boost.Python

Как открыть следующий класс с помощью Boost.Python?

class C {
 public:
  static void F(int) {}
  static void F(double) {}
};

Я пробовал что-то вроде этого:

bp::class_<C>("C")
  .def("F", (void (C::*)(int))&C::F).staticmethod("F")
  .def("F", (void (C::*)(double))&C::F).staticmethod("F")
;

Но это вызывает исключение в Python ( SystemError: инициализация libdistributions вызвала незарегистрированное исключение ). Если я удалю одну из перегрузок из bp :: class_ , то все будет нормально. Я знаю, что Boost.Python может автоматически работать с перегруженными конструкторами, поэтому мне было интересно, есть ли что-то подобное для статических методов.


Ответ

bp::class_<C>("C")
  .def("F", (void (C::*)(int))&C::F)  // Note missing staticmethod call!
  .def("F", (void (C::*)(double))&C::F).staticmethod("F")
;
5
задан Neil G 3 January 2012 в 21:26
поделиться