Boost.Python静态方法重载

时间:2012-01-03 16:50:09

标签: c++ python 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: initialization of libdistributions raised unreported exception)。如果我从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")
;

1 个答案:

答案 0 :(得分:3)