我有一個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