【发布时间】:2011-03-31 17:36:26
【问题描述】:
我有一个 c++ 类,它通过提供返回范围的函数来公开集合,使用 boost::range。
为了用boost::python将这个类导出到python,我使用了函数boost::python::range,它可以接受两个参数:返回集合的开始和结束迭代器的类的成员函数。
我想避免为每个集合手动编写开始/结束对,因为我已经提供了范围。但是我无法在 boost::python::range 上编写一个包装器,接受一个返回范围的成员函数作为参数。有任何想法吗? (实际上我有不止一个类,它们是模板化的,所以模板函数将模板类的成员函数的地址作为模板参数将不起作用,我的编译器说)
如果可与 g++-4.6 编译,我将接受 c++0x 解决方案。
编辑:一个示例代码: 说我有这门课:
struct A
{
std::vector<int> c;
typedef boost::sub_range<std::vector<int> > c_range;
c_range getc() { return c; }
};
为了从 getc 方法生成 Python 迭代器,我现在将这两个成员函数添加到 A 类中:
c_range::iterator c_begin() { return getc().begin(); }
c_range::iterator c_end() { return getc().end(); }
然后像这样公开它们:
boost::python::class_<A>("A")
.def("getc", boost::python::range(&A::c_begin, &A::c_end));
有没有办法直接写类似:
.def("getc", pyrange(&A::getc));
为了避免写c_begin和c_end?
【问题讨论】:
-
你能以代码形式展示一个例子吗?
标签: c++ boost-python