暴露std::vector<;结构>;使用boost.python 我有一个C++代码库,它使用一个带有STD::vector的结构,它应该被暴露到Python。

暴露std::vector<;结构>;使用boost.python 我有一个C++代码库,它使用一个带有STD::vector的结构,它应该被暴露到Python。,python,c++,c++11,boost-python,Python,C++,C++11,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(

在标题中:

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;
}
}
这会产生编译错误

<>因为我是C++和Boost的新手,所以任何评论,包括解决方案,搜索提示,以及建议,以供参考。p> 提前谢谢

方法
.def(“get_vector”,&myName::myfoo::get_vector)
不起作用,因为它返回指向向量的指针,因此有必要通知定义对象所有权应如何管理的策略:

class_<myName::myfoo>("myfoo", no_init)
   // current code
   .def("get_vector", &myfoo::get_vector, return_value_policy<reference_existing_object>())
;
然后可以导出向量:

#include <boost/python/suite/indexing/vector_indexing_suite.hpp>

class_<std::vector<sFOO>>("vector_sFOO_")
   .def(vector_indexing_suite<std::vector<sFOO>>())
;
#包括
类别(“向量”)
.def(向量索引套件())
;
方法
.def(“get_vector”,&myName::myfoo::get_vector)
不起作用,因为它返回指向向量的指针,因此有必要通知定义对象所有权应如何管理的策略:

class_<myName::myfoo>("myfoo", no_init)
   // current code
   .def("get_vector", &myfoo::get_vector, return_value_policy<reference_existing_object>())
;
然后可以导出向量:

#include <boost/python/suite/indexing/vector_indexing_suite.hpp>

class_<std::vector<sFOO>>("vector_sFOO_")
   .def(vector_indexing_suite<std::vector<sFOO>>())
;
#包括
类别(“向量”)
.def(向量索引套件())
;

经过一些小的编辑(例如sFOO->myName::sFOO),您的解决方案就像一个奇迹。非常感谢+1在这种情况下,我们希望公开第三方结构。这种方法可能不是最好的方法。我觉得()中的方法更合适。经过一些小的编辑(例如:sFOO->myName::sFOO),您的解决方案工作得非常出色。非常感谢+1在这种情况下,我们希望公开第三方结构。这种方法可能不是最好的方法。我发现()中的方法更合适。
struct sFOO
{
    unsigned int start = 3 ;
    double foo = 20.0 ;

    bool operator==(const sFOO& rhs)
    {
        return this == &rhs; //< implement your own rules.
    }
};
#include <boost/python/suite/indexing/vector_indexing_suite.hpp>

class_<std::vector<sFOO>>("vector_sFOO_")
   .def(vector_indexing_suite<std::vector<sFOO>>())
;