我有一個現有的C++代碼庫,它使用std :: vector的結構,它應該暴露給python。暴露std :: vector <struct> with boost.python
在頭:
struct sFOO
{
unsigned int start = 3 ;
double foo = 20.0 ;
};
在CPP
:
namespace myName
{
myfoo::myfoo(){
sFOO singlefoo;
std::vector<sFOO> foos;
}
sFOO singlefoo;
std::vector<sFOO>* myfoo::get_vector(){
return &foos;
}
}
和升壓::蟒片段:
using namespace boost::python;
class dummy3{};
BOOST_PYTHON_MODULE(vStr)
{
scope myName = class_<dummy3>("myName");
class_<myName::sFOO>("sFOO")
.add_property("start",&myName::sFOO::start)
.add_property("foo",&myName::sFOO::foo)
;
class_<myName::myfoo>("myfoo", no_init)
.def(init<>())
.def("checkfoo",&myName::myfoo::checkfoo)
.add_property("foos",&myName::myfoo::foos)
.add_property("singlefoo",&myName::myfoo::singlefoo)
}
(僅供參考,虛擬類dummy3用於模擬命名空間,因此使用範圍不是一種選擇。)
編譯和導入過程都可以,我可以訪問singlefoo,但每當我嘗試訪問vector foos時,都會遇到下面的錯誤消息。
Python class registered for C++ class std::vector<myName::sFOO,
std::allocator<myName::sFOO> >
爲了規避這個問題, 我首先嚐試vector_indexing_suite,但它並沒有幫助暴露結構的預先定義的載體。
我也認爲應該有相關的暴露指針蟒蛇的解決方案,所以我試圖通過以下獲取一個指針:
.def("get_vector",&myName::myfoo::get_vector)
產生編譯錯誤。
因爲我對C++和Boost都是新手,所以任何意見,包括解決方案,搜索提示和合適的參考建議都將不勝感激。
在此先感謝!
小修改後(例如。 sFOO - > myName :: sFOO),你的解決方案就像一個奇蹟。非常感謝+1 –