我有一个C++类,通过使用boost::range
提供函数返回范围来公开集合。使boost :: python :: range接受... boost ::范围
为了这个类导出到蟒蛇与boost::python
,我使用功能boost::python::range
,它可以接受两个参数:类返回集合的开始和结束迭代器的成员函数。
我想避免为每个集合手动编写开始/结束对,因为我已经提供了范围。但我不能设法写一个包装在boost :: python :: range接受作为参数返回一个范围的成员函数。有任何想法吗? (我实际上有超过一个类,这是模板化的,所以模板函数作为模板参数的模板类的成员函数的地址将不起作用,我的编译器说)
我会接受一个C++ 0x解决方案,如果编译与g ++ - 4.6。
编辑: 说我有这个类:如问一个示例代码
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
?
您可以显示代码形式的例子吗? – 2011-03-31 18:01:44